MS-DOS Forum

MS-DOS Forum
Anleitungen, Referenz aller DOS Befehle, Batch Dateien
 
RegistrierenRegistrieren  LoginLogin

Neues Thema eröffnen   Neue Antwort erstellen    MS-DOS Forum Foren-Übersicht -> Batch Programmierung
Autor
Nachricht
matthias





Ausgaben Umleiten Piping in Batch Dateien
Verfasst am: 07.06.2009, 01:22

Umleiten lassen sich Bildschirm-Ausgaben und Tastatur-Eingaben
durch Verwendung folgender Symbole:
> Ausgabe in Datei oder an ein Geraet umleiten
< Eingabe aus Datei oder von einem Geraet holen
| Ausgabe direkt in eine Eingabe leiten
Umleitungen sind sowohl auf der Befehlsebene als auch in BATDateien
moeglich. In dieser Lektion soll es zunaechst um die
Ausgabe-Umleitungen gehen. Das Prinzip wurde bereits in Lektion #3
(ECHO-Umleitung) beschrieben. Beispiele:
ECHO Dieser Satz wird in die Datei TEST geschrieben > TEST
ECHO Dieser Satz wird in der Datei TEST angefuegt >> TEST
Eine eventuell vorhandene Datei wird durch den einfachen Pfeil
geloescht, waehrend beim doppelten Pfeil am Ende angehaengt wird.
Grundsaetzlich lassen sich auch die Bildschirm-Ausgaben von
anderen Programmen oder DOS-Befehlen umleiten, z.B.:
FIND "49-89-" NODE\REGION24.001 > MUC.LST
Das Ergebnis der Suche, das standardmaessig auf dem Bildschirm
erscheint, wird hier in die Datei MUC.LST geschrieben.
WICHTIG: Nicht alle Bildschirm-Ausgaben koennen umgeleitet werden.

Voraussetzung ist, dass der Output vom Programm ueber die DOSSTANDARD-
AUSGABE vorgenommen wird. Nicht umleiten lassen sich:
* Ausgaben ueber das BIOS oder direkt in den VIDEO-RAM-Speicher
* Ausgaben ueber die STANDARD-FEHLER-AUSGABE
Die STANDARD-FEHLER-AUSGABE geht immer auf den Bildschirm, damit
der Benutzer auch bei umgeleiteten Ausgaben ueber eventuelle
Fehler sofort informiert wird. Dazu das folgende Beispiel:
copy DIESE.DAT A: > AUSGABE.TXT
Die Bestaetigung von DOS, "... Datei(en) kopiert", wird hier in
die Datei AUSGABE.TXT umgeleitet. Dies gilt auch fuer den Fall,
dass die zu kopierende Datei nicht existiert. Die zusaetzliche
Fehlermeldung "Datei nicht gefunden" erscheint dann jedoch auf
dem Bildschirm.
Ob und welche Ausgaben eines Programmes sich umleiten lassen,
muss man gegebenenfalls durch Ausprobieren herausfinden.

Umleitung an andere Geraete

Geraete-Namen koennen unter DOS wie Dateinamen verwendet werden.
Die Ausgabe kann also auch z.B. an den Drucker geschickt werden
Beispiel:
type DIESEN.TXT > PRN (= copy DIESEN.TXT PRN)
arj l ARCHIV > LPT1 (Inhaltsverzeichnis an Drucker)

Umleitung > NUL

NUL ist ein nicht existierendes Geraet, das aber benutzt werden
kann, um Ausgaben ins Nichts zu schicken. Damit lassen sich oft
unerwuenschte Ausgaben in BAT-Ablaeufen unterdruecken, sofern (!)
die Standard-Ausgabe verwendet wird.
Stoerende Fehlermeldungen, z.B. bei DEL ("Datei nicht gefunden")
lassen sich uebrigens am besten durch geeignete Abfragen unterdruecken:
IF exist %DATEI% del %DATEI%

Anfuegen in Dateien

Bei Verwendung des doppelten Pfeiles bitte beachten:
* Wenn die Datei noch nicht existiert, wirkt der doppelte Pfeil
wie ein einfacher.
* Beim ersten Mal, z.B in einer FOR-Schleife, sollte die Datei
einen definierten Zustand haben (evtl. vorher loeschen), z.B.:
del LISTE.TMP
for %%a in (*.TXT) do ECHO %%a >> LISTE.TMP
* Falls die vorhandene Datei ein EOF-Zeichen (Control-Z) am Ende
hat, wird dieses entfernt (zumindest bei neueren DOS-Versionen)

Eingaben bei Ausgabe-Umleitung

Wenn ein Programm bei umgeleiteter Ausgabe eine Eingabe erwartet,
steht man oft im Dunklen, weil die Eingabeaufforderung ja auch
umgeleitet wird.
Dies kann z.B. bei CHKDSK /F passieren oder auch bei DIR, wenn
da jemand die Umgebungsvariable DIRCMD=/P gesetzt hat...
Wie sich die Eingabe umleiten (also aus einer Datei holen) laesst,
kommt in der naechsten Lektion.

Hinweise

* Wenn es nichts umzuleiten gibt, wird trotzdem die angegebene
Datei erstellt, und zwar mit Null Bytes (!) Das kann man
gezielt nutzen, z.B.: REM > DATEI
* Normalerweise werden auf dem Bildschirm Zeilen ausgegeben, so
dass auch in der Datei Zeilen mit CR+LF am Ende gespeichert
werden. Das muss aber nicht so sein und haengt vom jeweiligen
Programm ab.
* Der Umleitungsausdruck, also Pfeil(e) mit Dateiname/Geraet,
muss nicht unbedingt hinter dem Befehl stehen. DOS nimmt vor
der Verarbeitung eines Befehls den Umleitungsausdruck heraus,
ganz egal, wo er gefunden wird. In den folgenden Beispielen
ist das Ergebnis immer das selbe:
ECHO Das ist ein Test> DATEI
>DATEI ECHO das ist ein Test
ECHO Das> DATEI ist ein Test
Auch bei versehentlichen Umleitungszeichen geht DOS ganz
konsequent vor, ob es nun Sinn macht oder nicht...
* Eine Umleitung beim Aufruf einer BAT-Datei ist wirkungslos.
Wer auf diese Weise ALLE Ausgaben einer BAT-Datei umleiten
will, muss dazu eine weitere COMMAND-Shell starten, z.B.:
COMMAND /C X.BAT > DATEI (Option /C s.DOS-Handbuch.)

Umleitung: Eingabe, Pipe

Die Eingabe-Umleitung ist das Gegenstueck zur Ausgabe-Umleitung
und verwendet den Pfeil nach links. Dabei werden Eingaben, die
eigentlich von der Tastatur erwartet werden, aus einer Datei eingelesen.
Voraussetzung ist natuerlich, dass die angegebene Datei
mit dem erforderlichen Inhalt existiert. Beispiel:
DEL A:*.* < J.TXT
Da DOS hier nachfragt "Sind Sie sicher (J/N)?" muss die Datei
J.TXT ein "J" und ein CR enthalten, also eine Zeile mit "J" und
dem ueblichen Zeilenabschluss.
Falls die Datei weitere Daten enthaelt, werden diese ignoriert,
da der DEL-Befehl ja keine weiteren Eingaben erwartet. Grundsaetzlich
koennen aber auch mehrfache Eingaben fuer ein Programm
nacheinander aus den einzelnen Zeilen einer Datei entnommen
werden. Dies laesst sich z.B. beim Programm DEBUG nutzen, um ein
kleines Programm als ASCII-Datei zu verschicken. Mit dem Befehl
DEBUG < Datei
werden dann alle Zeilen der Datei als DEBUG-Befehle abgearbeitet.
Noch ein Beispiel:
MORE < SOME.TXT
Das DOS-Programm MORE gibt die Eingabezeilen auf dem Bildschirm
aus, und zwar mit Stop nach jeder vollen Seite. (Ohne Umleitung
der Eingabe macht MORE gar keinen Sinn.)

Standard Input

Entsprechend der Ausgabe-Umleitung ist auch bei der Eingabe eine
Umleitung nur moeglich, wenn der Input des Programms ueber die
STANDARD-EINGABE angefordert wird. Dass es sich hierbei um die
Tastatur handelt, ist klar, aber das Programm muss die ueblichen
DOS-Funktionen benutzen. Bei Verwendung von BIOS-Funktionen kann
der Input nicht umgeleitet werden.
Quelle fuer eine Input-Umleitung kann auch ein Geraet sein, z.B.
COM1.

Ausgabe direkt in Eingabe leiten (PIPE)

Im obigen DEL-Beispiel wurde angenommen, dass die Datei J.TXT
fuer die Eingabe-Umleitung bereits vorhanden ist. Natuerlich
kann sie auch unmittelbar vorher per ECHO-Umleitung produziert
werden:
ECHO J> J.TXT
DEL A:*.* < J.TXT
del J.TXT
Das ist jedoch ziemlich umstaendlich, da auch noch die Hilfsdatei
hinterher geloescht werden muss. Einfacher geht's mit der direkten
Methode:
ECHO J| del A:*.*
Das "|" bewirkt, dass der Output von der linken Seite als Eingabe
fuer die rechte Seite uebernommen wird. DOS produziert dazu zwar
auch eine Zwischendatei (im temporaeren Verzeichnis %TEMP%), aber
man braucht sich um deren Namen und um das anschliessende Loeschen
nicht zu kuemmern.
Solche "PIPES" sind eigentlich dafuer gedacht, ganze Text-Dateien
zu verarbeiten. Das Programm SORT z.B. macht wie MORE (s.o.) auch
nur Sinn, wenn es mit Umleitungen benutzt wird. Beide Programme
erwarten (standardmaessig) den Input von der Tastatur und senden
den Output auf den Bildschirm.
Der folgende Befehl sortiert die Datei ASCII.TXT mit SORT /R in
absteigender Folge und gibt das Resultat seitenweise auf dem
Bildschirm aus (MORE):
SORT /R < ASCII.TXT | MORE

Anordnung im Befehl

Es koennen mehrere und verschiedene Umleitungen in einem Befehl
kombiniert werden. Fuer die richtige Reihenfolge der Angaben ist
nur zu beachten, dass mit "|" (Pipe) verbundene Programme immer
von links nach rechts abgearbeitet werden. Befehlsparameter und
Optionen muessen unmittelbar auf den zugehoerigen Befehl folgen.
Umleitungsausdruecke mit Pfeil nach links/rechts sind zwangslaeufig
dem ersten bzw. letzten Programm (Befehl) zugeordnet,
ganz gleich, wo sie plaziert werden.

Hinweise

Vorsicht bei der Eingabe-Umleitung fuer Programme, die ganz
bestimmte Eingaben erwarten: Falls die Eingabedatei falsche oder
gar keine Angaben enthaelt, laesst sich auch mit der Tastatur
nichts mehr korrigieren. Mit etwas Glueck geht vielleicht noch
ein Control-BREAK, sonst ist ein Warmstart faellig.
Und: bitte nicht fuer Eingabe- und Ausgabe-Umleitung die selbe
Datei verwenden, z.B.:
Befehl < DATEI > DATEI
Da sich DOS beeilt, die Ausgabedatei neu anzulegen, ist die
Eingabedatei hin, und dann.. s.o.
Achtung: Bug!

Anweisungen mit PIPE ("|") duerfen nicht bedingt sein, z.B.:

IF %1==X echo.|date
MS-DOS meldet "undefinierte Zugriffsnummer", wenn SHARE vorhanden
ist, sonst passiert einfach gar nichts! Bei SORT kann sogar die
Fehlermeldung "Zuwenig Speicherplatz auf dem Datentraeger" kommen.
Falls noetig, also eine IF...GOTO Konstruktion verwenden!
Bedingte Anweisungen mit Pfeil nach links/rechts sind dagegen
problemlos moeglich.
_________________
 
Neues Thema eröffnen   Neue Antwort erstellen    MS-DOS Forum Foren-Übersicht -> Batch Programmierung

Tags: datei umleiten, datei ausgabe, dos, batch

 
 Verwandte Themen   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge eine gelöschte MS-DOS Datei wiederherstellen 4340 09.11.2008, 11:47
Keine neuen Beiträge Ein Programm benutzt nicht den XMS-Erweiterungsspeicher 1275 25.11.2008, 09:50
Keine neuen Beiträge Die Meldung "Packed File Corrupt" erscheint 1323 21.11.2008, 06:30
Keine neuen Beiträge Ein Programm meldet, dass die MS-DOS-Version falsch ist 991 16.11.2008, 11:59
Keine neuen Beiträge MS-DOS wird nicht im oberen Speicherbereich ausgeführt 1594 09.11.2008, 11:40
 



[ Time: 0.3329s ][ Queries: 59 (0.1019s) ][ GZIP on - Debug on ]