DieUmleitung kann verwendet werden, um dieGeräte Standardeingabe (stdin), Standardausgabe (stdout), und Standardfehler (stderr) von ihren Standardeinstellungen (Tastatur und Bildschirm) auf ein anderes Gerät, z. B. NUL oder einen seriellen Anschluss, auf eine Datei oder auf die Windows-Zwischenablageumzuleiten. Bei der Verwendung der Umleitung für ein Gerät ist ein gewisser Ermessensspielraum erforderlich.
Die Umleitung gilt immer für einen bestimmten Befehl und ist nur für die Dauer dieses Befehls gültig. Nach Beendigung des Befehls kehren die Zuweisungen für Standardeingabe, Standardausgabe und Standardfehler zu dem zurück, was sie vor dem Befehl waren.
TCCDie Ausgabe des Befehls erfolgt normalerweise in ANSI. Wenn Sie die Ausgabe in Unicode umleiten wollen, müssen Sie entweder die Startoption /U in TCC oder die Option Unicode Output in TCMD.INI verwenden.
In den folgenden Beschreibungen bedeutet Dateiname entweder den Namen einer Datei oder eines entsprechenden Geräts (CON für Tastatur und Bildschirm; CLIP: (oder CLIP0: - CLIP9:) für die Zwischenablage; NUL für das "Null"-Gerät usw.).
Hier sind die Standardumleitungsoptionen, die von TCC unterstützten Umleitungsoptionen (siehe unten für zusätzliche Umleitungsoptionen unter Verwendung numerischer Dateihandles):
Besondere Überlegungen für bestimmte Befehle
| < Dateiname | Um Eingaben von einer Datei oder einem Gerät zu erhalten, anstatt von der Tastatur. |
Überschreiben |
anhängen |
|
Standardausgabe |
> Dateiname |
>> Dateiname |
Standardfehler |
>&> Dateiname |
>>&> Dateiname |
Standardausgabe und Standardfehler zusammenführen |
>& dateiname |
>>& dateiname |
Um eine Umleitung zu verwenden, setzen Sie das Umleitungssymbol und den Dateinamen an das Ende der Befehlszeile, nach dem Befehlsnamen und eventuellen Parametern. Um zum Beispiel die Ausgabe des DIR-Befehls in eine Datei namens DIRLIST umzuleiten , könnten Sie eine Befehlszeile wie diese verwenden:
dir /b *.dat > dirlist
Sie können für ein und denselben Befehl jede beliebige Kombination aus Eingabe- und Ausgabeumleitung verwenden, die für Ihren Zweck geeignet ist. Zum Beispiel sendet dieser Befehl die Eingabe aus der Datei DIRLISTan das externe Programm SORT und die Ausgabe von SORT an die Datei DIRLIST.SRT:
sort < dirlist > dirlist.srt
Sie können Text in oder aus der Windows-Zwischenablage umleiten , indem Sie den Pseudo-Gerätenamen CLIP: verwenden (der Doppelpunkt ist erforderlich). Die Umleitung in die Zwischenablage erfolgt immer in UTF16 Unicode.
Wenn Sie die Ausgabe eines einzelnen internen Befehls wie DIR umleiten , endet die Umleitung automatisch, wenn dieser Befehl beendet ist. Wenn Sie eine Stapeldatei mit Umleitung starten, wird die gesamte Ausgabe der Stapeldatei umgeleitet, und die Umleitung endet, wenn die Stapeldatei beendet ist. Wenn Sie die Umleitung nach der schließenden Klammer einer Befehlsgruppe verwenden (z. B. ... > report), wird die gesamte Ausgabe der Befehlsgruppe umgeleitet, und die Umleitung endet, wenn die Befehlsgruppe beendet ist.
Sie können das Format der umgeleiteten Ausgabe ändern. Diese Optionen setzen die Direktiven UnicodeOutput und UTF8Output in TCMD.INI außer Kraft. Hinweis: Diese Optionen funktionieren nur für die Umleitung der Ausgabe von TCC internen Befehlen und Batch-Dateien.
| >:a | Umgeleitete Ausgabe (STDOUT und/oder STDERR) ist ANSI (8-Bit-Zeichen) |
| >:u | Umgeleitete Ausgabe ist UTF16 Unicode |
| >:8 oder >:u8 | Umgeleitete Ausgabe ist UTF8 |
| >>:a | Angehängte umgeleitete Ausgabe (STDOUT und/oder STDERR) ist ANSI (8-Bit-Zeichen) |
| >>:u | Angehängte umgeleitete Ausgabe ist UTF16 Unicode |
| >>:8 oder >>:u8 | Angehängte umgeleitete Ausgabe ist UTF8 |
Besondere Überlegungen für bestimmte Befehle
Sie können nicht die gesamte Ausgabe der Ausführung einer DO-Schleife umleiten , da der DO-Befehl und das dazugehörige ENDDO nicht Teil einer Befehlsgruppe sein dürfen.
Um die Ausgabe eines TEXT-Befehls umzuleiten , fügen Sie die Umleitungssyntax an den TEXT-Befehl an.
Wenn Sie einen FOR- oder GLOBAL-Befehl ausführen , wird die Umleitung für jede Iteration separat durchgeführt, basierend auf dem aktuellen Verzeichnis für diese Iteration. Dies kann dazu führen, dass die Ausgabedatei wiederholt überschrieben wird oder dass in jedem Verzeichnis eine eigene Ausgabedatei erstellt wird. Um eine einzige, kumulative Ausgabedatei zu erzeugen, verwenden Sie die Befehlsgruppierung wie im folgenden Beispiel:
( for /r %f in (*.btm) echo %@full[%f] ) > c:\temp\btmlst
Wenn die Ausgabe mit >, >& oder >&>in eine Datei geleitet wird und diese Datei bereits existiert, wird sie überschrieben. Sie können vorhandene Dateien schützen, indem Sie den Befehl SETDOS /N1, die Einstellung Umgeleitete Ausgabedateien schützen auf der Registerkarte Start der Konfigurationsdialoge oder die OptionUmgeleitete Ausgabedateien schützen verwenden .
Wenn die Ausgabe mit >>, >>& oder >>&>an eine Datei angehängt wird , wird die Datei erstellt, wenn sie noch nicht vorhanden ist. Wenn jedoch der NoClobber-Modus wie oben beschrieben eingestellt ist, wird bei der Umleitung durch Anhängen keine neue Datei erstellt; wenn die Ausgabedatei nicht existiert, wird stattdessen eine "Datei nicht gefunden" oder eine ähnliche Fehlermeldung angezeigt.
Sie können die aktuelle Einstellung von NoClobber vorübergehend außer Kraft setzen, indem Sie ein Ausrufezeichen [!] nach dem Umleitungssymbol verwenden. Zum Beispiel, um die Ausgabe von DIR in die Datei DIROUT umzuleiten und das Überschreiben einer vorhandenen Datei trotz der NoClobber-Einstellung zu erlauben:
dir >! dirout
Umleitungen sind vollständig verschachtelbar. Sie können beispielsweise eine Stapeldatei aufrufen und deren gesamte Ausgabe in eine Datei oder ein Gerät umleiten. Die Ausgabeumleitung eines Befehls innerhalb der Batchdatei wird nur für diesen Befehl wirksam; wenn der Befehl abgeschlossen ist, kehrt die Ausgabe in die umgeleitete Ausgabedatei oder das Gerät zurück, das für die gesamte Batchdatei verwendet wird.
Sie können die Umleitung verwenden, um eine leere (Null-Byte-)Datei zu erstellen. Geben Siedazu >Dateiname als Befehl ein , wobei vor dem >-Zeichen kein eigentlicher Befehl stehen darf. Wenn Sie Protect redirected output file aktiviert haben , verwenden Sie >!filename.
Zusätzlich zu den oben genannten Umleitungsoptionen unterstützt TCC unterstützt auch die CMD-Syntax:
| n>Datei | Umleitung von Handle n in die genannte Datei |
| n>&m | Umleitung von Handle n an denselben Ort wie Handle m |
Achtung! Sie dürfen keine Leerzeichen zwischen n und > oder zwischen >, & und m in der zweiten Form setzen . Die Werte von n und m müssen einstellige Dezimalzahlen sein und stehen für Datei-Handles. Windows definiert 0, 1 und 2 wie in der folgenden Tabelle dargestellt.
Handle |
Zuweisung |
0 |
Standardeingabe |
1 |
Standardausgabe |
2 |
Standardfehler |
Die Syntax n>file leitet die Ausgabe von Handle n in eine Datei um . Sie können diese Form verwenden, um zwei Handles an verschiedene Stellen umzuleiten. Zum Beispiel:
dir > outfile 2> errfile
sendet die normale Ausgabe in eine Datei namens OUTFILE und alle Fehlermeldungen in eine Datei namens ERRFILE.
Die Syntax n>&m leitet das Handle n an dasselbe Ziel wie das zuvor zugewiesene Handle m. Um beispielsweise den Standardfehler in dieselbe Datei wie die Standardausgabe zu senden, könnten Sie diesen Befehl verwenden:
dir > outfile 2>&1
Beachten Sie, dass Sie die gleichen Operationen mit den Standardumleitungsfunktionen durchführen können. Die beiden obigen Beispiele könnten wie folgt geschrieben werden
dir > outfile >&> errfile
und
dir >& outfile
Überall dort, wo die Umleitung von Eingaben unterstützt wird, können Sie einen Linux-ähnlichen "Here-document"-Ansatz verwenden. Die Syntax ist:
program << word
Die aktuelle Stapeldatei wird bis zum nächsten Vorkommen von word gelesen, und der resultierende Text wird zur Standardeingabe für program. Ein Beispiel:
c:\test\program.exe << endinput
input 1
input 2
input 3
endinput
echo This is the next line after "program.exe"
Besonderheiten von "here document":
•Wenn auf << einBindestrich (-) folgt, wird das führende Leerzeichen in den folgenden Zeilen entfernt, bevor sie an das Programm übergeben werden (d.h. sie werden effektiv linksbündig ausgerichtet).
•Der Parser führt in jeder Zeile eineVariablenexpansiondurch , es sei denn, das auf << folgende Wort ist in Anführungszeichen eingeschlossen.
Mit "here-string" können Sie eine Zeichenkette direkt an die Eingabe eines Programms senden. Die Syntax lautet:
program <<< string
Dies ist ähnlich wie die Verwendung von KEYSTACK, aber einfacher für die Texteingabe. (Wenn Sie spezielle Tasten senden oder Wartezeiten einfügen müssen, müssen Sie KEYSTACK verwenden). Zum Beispiel, um eine Zeichenkette an die Standardeingabe von program zu senden:
c:\test\program.exe <<< This is some input text.