Direkt zum Inhalt

Windows-Dateiumleitungserweiterungen in TCC

TCC unterstützt die Eingabe-/Ausgabe-Umleitungsoperatoren in CMD und erweitert sie um neue Windows-Umleitung Typen und UTF-8- und UTF-16-Umleitung.

Die Umleitung kann verwendet werden, um die Standardeingabegeräte (stdin), Standardausgabegeräte (stdout) und Standardfehlergeräte (stderr) von ihren Standardeinstellungen (Tastatur und Bildschirm) einem anderen Gerät wie NUL oder einem seriellen Anschluss oder einer Datei neu zuzuweisen , oder in die Windows-Zwischenablage oder das TCC Pseudogeräte CLIPn: und TMPn:. Die Umleitung gilt immer für einen bestimmten Befehl und dauert nur für die Dauer dieses Befehls. Wenn der Befehl beendet ist, werden die Zuweisungen für Standardeingabe, Standardausgabe und Standardfehler auf ihre vorherigen Werte zurückgesetzt.

TCCDie Ausgabe erfolgt normalerweise in ANSI. Wenn Sie die Ausgabe in Unicode (UTF-8 oder UTF-16) umleiten möchten, können Sie die Startoption /U in verwenden TCC, oder die Unicode-Ausgabeoption in TCMD.INI, oder die >: 8 or >:u Umleitungssyntax.

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 standardmäßigen Eingabe-/Ausgabe-Umleitungsoptionen aufgeführt, die von unterstützt werden TCC (Weitere Umleitungsoptionen mit numerischen Dateihandles finden Sie weiter unten):

Eingabeumleitung

Um Eingaben von einer Datei oder einem Gerät statt über die Tastatur zu erhalten:

    < Dateinamen

Ausgabeumleitung

STDOUT überschreiben:

    > Dateiname

STDOUT anhängen:

    >> Dateiname

STDERR überschreiben:

    >&> Dateiname

STDERR anhängen:

    >>&> Dateiname

Merge überschreibt Standardausgabe und Standardfehler:

    >&

Dateiname zusammenführen, Standardausgabe und Standardfehler anhängen:

    >>& Dateiname

Um die Umleitung zu verwenden, platzieren Sie das Umleitungssymbol und den Dateinamen am Ende der Befehlszeile, nach dem Befehlsnamen und etwaigen Parametern. Um beispielsweise 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 je nach Zweck eine beliebige Kombination aus Eingabe- und Ausgabeumleitung für denselben Befehl verwenden. Dieser Befehl sendet beispielsweise Eingaben aus der Datei DIRLIST an das externe Programm SORT und Ausgaben von SORT an die Datei DIRLIST.SRT:

    sort dirlist.srt

Mithilfe von können Sie Text in die Windows-Zwischenablage umleiten oder aus dieser umleiten TCC Pseudo-Gerätename CLIP: (der Doppelpunkt ist erforderlich). Die Umleitung in die Zwischenablage erfolgt immer mit UTF16 Unicode. Wenn Sie die Ausgabe eines einzelnen internen Befehls wie DIR umleiten, endet die Umleitung automatisch, wenn dieser Befehl ausgeführt wird. Wenn Sie eine Batchdatei mit Umleitung starten, wird die gesamte Ausgabe der Batchdatei umgeleitet und die Umleitung endet, wenn die Batchdatei fertig ist. Wenn Sie die Umleitung nach der schließenden Klammer einer Befehlsgruppe verwenden (z. B. ...) > Bericht), wird die gesamte Ausgabe der Befehlsgruppe umgeleitet und die Umleitung endet, wenn die Befehlsgruppe fertig ist.

Sie können das Format der umgeleiteten Ausgabe ändern. Diese Optionen überschreiben die UnicodeOutput- und UTF8Output-Direktiven in TCMD.INI. Hinweis: Diese Optionen funktionieren nur für die Umleitung der Ausgabe von TCC interne Befehle und Batchdateien.

    >:a     Die umgeleitete Ausgabe (STDOUT und/oder STDERR) ist ANSI (8-Bit-Zeichen).

    >:u     Die umgeleitete Ausgabe ist UTF16 Unicode

    >:8 oder >:u8     Die umgeleitete Ausgabe ist UTF8

    >>:a     Angehängte umgeleitete Ausgabe (STDOUT und/oder STDERR) ist ANSI (8-Bit-Zeichen)

    >>:u     Die angehängte umgeleitete Ausgabe ist UTF16 Unicode

    >>:8 oder >>:u8     Die angehängte umgeleitete Ausgabe ist UTF8

NoClobber

Wenn die Ausgabe mit >, >& oder >&> in eine Datei geleitet wird und diese Datei bereits vorhanden ist, 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 Option „Umgeleitete Ausgabedateien schützen“ verwenden.

Wenn die Ausgabe mit >>, >>& oder >>&> an eine Datei angehängt wird, wird die Datei erstellt, sofern sie noch nicht vorhanden ist. Wenn jedoch der NoClobber-Modus wie oben beschrieben eingestellt ist, wird durch die Anhängeumleitung keine neue Datei erstellt; Wenn die Ausgabedatei nicht vorhanden ist, wird stattdessen die Fehlermeldung „Datei nicht gefunden“ oder ein ähnlicher Fehler angezeigt.

Sie können die aktuelle Einstellung von NoClobber vorübergehend außer Kraft setzen, indem Sie ein Ausrufezeichen [!] nach dem Umleitungssymbol verwenden. Um beispielsweise die Ausgabe von DIR in die Datei DIROUT umzuleiten und das Überschreiben aller vorhandenen Dateien trotz der NoClobber-Einstellung zu ermöglichen:

    dir >! dirout

Mehrere Umleitungen

Die Umleitung ist vollständig verschachtelbar. Sie können beispielsweise eine Batchdatei aufrufen und deren gesamte Ausgabe an eine Datei oder ein Gerät umleiten. Die Ausgabeumleitung für einen Befehl innerhalb der Batchdatei wird nur für diesen Befehl wirksam. Wenn der Befehl abgeschlossen ist, wird die Ausgabe auf die umgeleitete Ausgabedatei oder das umgeleitete Gerät zurückgesetzt, das für die Batchdatei als Ganzes verwendet wird.

Erstellen einer leeren Datei

Mithilfe der Umleitung können Sie eine leere Datei (null Byte) erstellen. Geben Sie dazu >Dateiname als Befehl ein, ohne einen eigentlichen Befehl vor dem >-Zeichen. Wenn Sie „Umgeleitete Ausgabedatei schützen“ aktiviert haben, verwenden Sie >!Dateiname.

Umleitung per Handle

Zusätzlich zu den oben genannten Umleitungsoptionen: TCC unterstützt auch die CMD-Syntax:

    n>Datei     Handle n in die benannte Datei umleiten

    n>&m    Leiten Sie Handle n an die gleiche Stelle wie Handle m um

Warnung: Sie dürfen in der zweiten Form keine Leerzeichen zwischen n und > oder zwischen >, & und m einfügen. Die Werte von n und m müssen einzelne Dezimalstellen sein und Dateihandles darstellen. Windows definiert 0, 1 und 2 als.

    0 - Standardeingang

    1 - Standardausgabe

    2 - Standardfehler

Die n>file-Syntax leitet die Ausgabe vom Handle n in die Datei um. Mit diesem Formular können Sie zwei Handles an verschiedene Orte umleiten. Zum Beispiel:

    dir > outfile 2 > errfile

Sendet die normale Ausgabe an eine Datei namens OUTFILE und alle Fehlermeldungen an eine Datei namens ERRFILE.

Die n>&m-Syntax leitet Handle n an dasselbe Ziel um wie das zuvor zugewiesene Handle m. Um beispielsweise die Standardfehlerausgabe an dieselbe Datei wie die Standardausgabe zu senden, können Sie diesen Befehl verwenden:

    dir > outfile 2>&1

Beachten Sie, dass Sie dieselben Vorgänge mithilfe der Standardumleitungsfunktionen ausführen können. Die beiden obigen Beispiele könnten wie folgt geschrieben werden:

    dir > outfile >&> errfile

und

    dir >& outfile

„Hier-Dokument“-Umleitung

Überall dort, wo die Eingabeumleitung unterstützt wird, können Sie einen Linux-ähnlichen „Here-Document“-Ansatz verwenden. Die Syntax lautet:

    Programm << Wort

Die aktuelle Batchdatei wird bis zum nächsten Wortvorkommen gelesen und der resultierende Text wird zur Standardeingabe für das Programm. Zum Beispiel:

c:\test\program.exe << endinput
Eingabe 1
Eingabe 2
Eingabe 3
Endeingabe
echo Dies ist die nächste Zeile nach „program.exe“

Besonderheiten von „here document“:

Wenn dem << ein Bindestrich (-) folgt, wird der führende Leerraum 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 eine Variablenerweiterung durch, es sei denn, das Wort nach << ist in doppelte Anführungszeichen gesetzt.

„Here-string“-Umleitung

Mit dem „Here-String“ können Sie String-Text direkt an die Eingabe eines Programms senden. Die Syntax lautet:

Programm <<< Zeichenfolge

Dies ähnelt der Verwendung von KEYSTACK, ist jedoch für die Texteingabe einfacher einzugeben. (Wenn Sie Sonderschlüssel senden oder Wartezeiten einfügen müssen, müssen Sie KEYSTACK verwenden.) Um beispielsweise eine Zeichenfolge an die Standardeingabe des Programms zu senden:

c:\test\program.exe <<< Dies ist ein Eingabetext.

Windows Pipes-Erweiterungen in TCC

Piping ist eine spezielle Form der Umleitung, bei der eine zusätzliche Instanz von verwendet wird TCC für jede Instanz der in der Befehlszeile angegebenen Rohrleitung. TCC unterstützt die Pipe-Operatoren in CMD und erweitert sie um neue Pipe-Operatoren sowie UTF-8- und UTF-16-Rohrleitungen.

Sie können eine Pipe erstellen, um die Standardausgabe eines Befehls (Befehl1) an die Standardeingabe eines anderen Befehls (Befehl2) zu senden und optional auch den Standardfehler zu senden:

was an die Pipe gesendet wird
Befehlsformat
Nur Standardausgabe
command1 | command2
Standardausgabe und Standardfehler zusammenführen
command1 |& command2
Nur Standardfehler
Befehl1 |&| Befehl2

Um beispielsweise die Ausgabe des Befehls ALIAS (der eine Liste Ihrer Aliase und deren Werte anzeigt) zu übernehmen und sie an das externe SORT-Dienstprogramm weiterzuleiten, um eine sortierte Liste zu erstellen, würden Sie den folgenden Befehl verwenden:

Alias ​​| Sortieren

Um dasselbe zu tun und die sortierte Liste dann zur Anzeige an den internen VIEW-Befehl weiterzuleiten:

Alias ​​| sortieren | Ansicht /s

Die TEE- und Y-Befehle sind „Rohrverbindungen“, die mehr Flexibilität bieten Windows-Rohre.

TCCDie Ausgabe erfolgt normalerweise in ANSI. Wenn Sie die Ausgabe in Unicode umleiten möchten, müssen Sie entweder die Startoption /U in verwenden TCC, oder die Unicode-Ausgabeoption in TCMD.INI.

Ebenso wie die Umleitung sind Pipes vollständig verschachtelbar. Sie können beispielsweise eine Batchdatei aufrufen und ihre gesamte Ausgabe mit einer Pipe an einen anderen Befehl senden. Eine Pipe auf einen Befehl innerhalb der Batchdatei wird nur für diesen Befehl wirksam; Wenn der Befehl abgeschlossen ist, wird die Ausgabe auf die Pipe zurückgesetzt, die für die gesamte Batchdatei verwendet wird. Möglicherweise arbeiten auch zwei oder mehr Pipes gleichzeitig, wenn die Pipes beispielsweise in verschiedenen Fenstern oder Prozessen ausgeführt werden.

Verarbeiten jeder von einer Pipe empfangenen Zeile

Um jede Textzeile zu verarbeiten, die von der linken Seite einer Pipe gesendet wird TCC, können Sie diese Syntax verwenden:

dir | für %file im (@CON:) Befehl %file

Dieses Beispiel zeigt, wie jede Zeile weitergeleiteter Daten an einen Befehl übergeben wird.

Warnhinweise: TCC implementiert Pipes, indem es einen neuen Prozess für das empfangende Programm startet. Dieser Prozess durchläuft für JEDES empfangende Programm den Standard-Shell-Startvorgang, einschließlich der Ausführung der TCSTART-Datei. Alle Sende- und Empfangsprogramme laufen gleichzeitig; Das sendende Programm schreibt in die Pipe und das empfangende Programm liest aus der Pipe. Wenn das empfangende Programm ein End-of-File-Signal findet, beendet es das Lesen und Verarbeiten der weitergeleiteten Daten und wird beendet. Wenn Sie Rohre mit verwenden TCC, stellen Sie sicher, dass Sie die möglichen Konsequenzen berücksichtigen, die sich aus der Verwendung eines separaten Prozesses zum Ausführen des empfangenden Programms ergeben, insbesondere, dass es keine Umgebungsvariablen des sendenden Programms erstellen/ändern/löschen kann und die Aufnahme eines Befehls zum Ändern von Verzeichnissen in die TCSTART-Datei dazu führen kann Neuer Prozess zur Ausführung in einem anderen Verzeichnis. Wenn Sie mehr als eine Pipe in einem einzelnen Befehl verwenden, z. Im zweiten Beispiel oben mit LIST fügt jede Pipe eine weitere Instanz von hinzu TCC. Wenn Sie die Pipe im selben Kontext ausführen müssen, verwenden Sie In-Process-Pipes (siehe unten).

Pipe-Aktivität anzeigen

Das TCC PIPEVIEW Der Befehl liest aus STDIN und zeigt die Pipe-Aktivität in Echtzeit in einem an ANZEIGEN Fenster und leitet es gleichzeitig an STDOUT weiter, damit es von der nächsten App gelesen werden kann.

Zusätzliche Pipe-bezogene Befehle

TCC verfügt über mehrere zusätzliche Befehle zum Anpassen von Rohren:

  • TEE wird normalerweise verwendet, um die Ausgabe eines Programms aufzuteilen, sodass Sie sie auf dem Display sehen und auch in einer Datei speichern können. Es kann auch verwendet werden, um Zwischenausgaben zu erfassen, bevor die Daten durch ein anderes Programm oder einen anderen Befehl geändert werden.

  • Y kopiert die Standardeingabe in die Standardausgabe. Sobald die Eingabe beendet ist, werden die benannten Dateien an die Standardausgabe angehängt. 

  • PEE ähnelt TEE, leitet STDOUT jedoch nicht an mehrere Dateien, sondern über Pipes an mehrere sekundäre Befehle weiter. Sie müssen jeden Befehl (und alle Argumente) in doppelte Anführungszeichen setzen.

In-Prozess-Rohre

In-Process-Pipes funktionieren wie die DOS-Pipes im alten Stil, indem sie eine temporäre Ausgabedatei erstellen, STDOUT zu dieser Datei umleiten und dann die temporäre Datei zu STDIN des folgenden Befehls umleiten. Die Syntax lautet:

command1 |! Befehl2

Dies ist dasselbe wie Folgendes:

Befehl1 > temp.dat & Befehl2 < temp.dat

ist aber einfacher zu tippen und zu lesen.

Der Vorteil von In-Process-Pipes besteht darin, dass Befehl2 im selben Kontext wie Befehl1 ausgeführt wird, sodass Sie beispielsweise Umgebungsvariablen ändern können, ohne dass diese beim Beenden von Befehl2 verworfen werden. Es gibt auch einige Nachteile bei der Verwendung dieser Art von „Pseudo-Pipe“ – sie ist normalerweise langsamer als eine echte Pipe; es wird etwas Speicherplatz für seine temporäre Datei beanspruchen; und Befehl2 wird erst gestartet, wenn Befehl1 beendet wurde.

Weiterleitung der ANSI-, Unicode- und UTF-8-Ausgabe

Sie können das Format der an eine Pipe gesendeten Ausgabe ändern. Diese Optionen überschreiben die UnicodeOutput- und UTF8Output-Direktiven in TCMD.INI. Die Piped-Ausgabeoptionen funktionieren auch mit In-Process-Pipes (d. h. |!:u). Hinweis: Diese Optionen funktionieren nur für die Umleitung der Ausgabe von TCC interne Befehle und Batchdateien.

|:a Die Pipe-Ausgabe ist ANSI
|:u Die weitergeleitete Ausgabe ist UTF16 Unicode
|:8 oder |:u8 Die weitergeleitete Ausgabe ist UTF8