2012-05-30 6 views
9

Auf Unix würde ich so etwas wie:Wie leiten Sie die Standardeingabe in eine Datei in der Windows-Befehlszeile um?

cat > file.txt 

Wie kann ich dies tun, auf der Windows-Eingabeaufforderung oder eine Batchdatei?

EDIT: Grundsätzlich, ich suche für die Funktionalität von cat ohne Argumente (es von stdin liest und spuckt es aus auf stdout zurück).

+1

'type thisfile> output.txt' schiebt alle Ausgaben wie Unix cat 'type thisfile >> output.txt' hängt alle Ausgaben an die Datei an, ohne sie zu überschreiben – Kyle

+0

+1 für die Verwendung von' type' solch eine coole und einfache Lösung. –

+0

@DominicP außer dass es nicht für meine Zwecke funktioniert (lesen Sie nach dem "EDIT:") – Matt

Antwort

16

TYPE CON

CON ist das MS-DOS-Gerät für die Konsoleneingabe. Sie können in eine Datei umleiten wie folgt:

TYPE CON>output.txt

zu beenden, schlug Ctrl + C oder Ctrl + Z, Geben Sie (Ctrl + Z = EOF).

+0

Im Laufe des Jahres zu spät, aber schließlich eine non-workaround-Antwort! Vielen Dank! – Matt

+1

Ah lol! Es könnte für andere nützlich sein, obwohl ich denke ... Ich bin wahrscheinlich die einzige Person in meinem Alter, die von der eleganten 'TYPE CON> LPT1'-Verknüpfung weiß, um MS-DOS in eine Schreibmaschine zu verwandeln! –

+1

Windows-Alternativen zu vielen * nix-Befehlen existieren - aber sie "entwickelten" sich, anstatt intelligent wie Bash entworfen zu sein, also sind sie ein bisschen schwieriger zu finden und oft viel komplexer zu verwenden, als sie sein sollten ... Ein großartiges Ein Beispiel für diesen Unterschied ist der Bash-Backtick gegen das äquivalente FOR-Konstrukt in DOS. Vielen Dank für Powershell und C# Skript! –

0

Standardeingang:

Batch-Datei:

:: set /p MyVar= Prompts user for stdin information 

set /p MyVar= 

echo %MyVar% > filename 
+0

Das müsste aber zuerst die gesamte stdin lesen, oder? Es scheint, als wäre es unpraktisch, wenn stdin sehr groß ist. – Matt

8

Wenn alles, was Sie wollen stdin lesen und schreiben, was Sie zu stdout lesen, dann wird FINDSTR arbeiten.

Sie können Stdin über Umleitung oder eine Rohrleitung liefern.

FINDSTR "^" ist sehr ähnlich zu cat, da es die genaue binäre Eingabe ohne Änderung ausgeben wird.

If ist auch identisch mit cat, wenn eine einzelne Eingabedatei angegeben wird.

findstr "^" fileName 

Wieder wird die Ausgabe eine exakte binäre Kopie sein.

Die Funktionalität weicht ab, wenn mehrere Eingabedateien angegeben werden, da in diesem Fall der Name der Datei als Präfix für jede Ausgabezeile verwendet wird.

Es unterscheidet sich auch von cat darin, dass es nicht sowohl von stdin als auch von einer benannten Datei lesen kann.

EDIT
Beachten Sie, dass FINDSTR end-of-line anhängt Marker <CR><LF> Eingang geleitet, wenn der letzte Charakter des Eingangsstroms kein <LF> ist. Dies ist eine Funktion von FINDSTR und nicht der Windows-Pipe-Mechanismus. FINDSTR fügt <CR><LF> nicht an umgeleitete Eingabe an. FINDSTR wird unbegrenzt auf XP und Windows 7 hängen bleiben, wenn umgeleitete Eingabe gelesen wird und die letzte Zeile nicht mit <LF> endet. Weitere Informationen finden Sie unter What are the undocumented features and limitations of the Windows FINDSTR command?.

+0

BEARBEITEN - Korrigierte Informationen über Piped-Eingang mit angehängtem CR/LF. Hinzugefügt Informationen über XP und Windows 7 möglicherweise hängen mit umgeleiteten Eingabe – dbenham

+0

Vielen Dank für diese Antwort! Für alle anderen da draußen ist eine Batch-Datei, die stdin in die Datei "foo.txt" schreibt (anfügt): findstr "^" >> foo.txt –

4

Ich denke, more.exe könnte das sein, was Sie suchen.

Es kann Eingabe nehmen sowohl von der Konsole:

more > file1.txt 

Oder verrohrt aus einer anderen Datei in, die TYPE CONnicht Griff:

type file1.txt | more > file2.txt 

(more scheint eine neue Zeile anfügen zu Ihrer Datei und erweitert Registerkarten, also verwenden Sie es nicht für Binärdaten!)

+0

Eigentlich half dieser, als ich multiple Zeilen hatte. Danke – TheGameiswar