Anhang
Anhang zur Beschreibung der Features und des Implementierungsstatus
von FreeCOM
Aktuelles Verzeichnis:
Das aktuelle Verzeichnis ist das Standardverzeichnis eines Laufwerks.
DOS speichert für jedes Laufwerk ein Standardverzeichnis. Wenn ein Pfad
nur mit einer Laufwerksspezifikation angegeben wird, z. B. D:, wird er
mit diesem Standardverzeichnis dieses Laufwerks ergänzt, um den zu
verwendenden absoluten Pfad zu erstellen.
Aktuelles Arbeitsverzeichnis:
Im Gegensatz zum aktuellen Verzeichnis ist das aktuelle Arbeitsver-
zeichnis der absolute Pfad, der aus dem aktuell ausgewählten Laufwerk
und dem aktuellen Verzeichnis dieses Laufwerks zusammengesetzt wird.
Pfadspezifikation:
Unter DOS wird ein absoluter Pfad aus mehreren Komponenten zusammen-
gebaut:
1. Dem Laufwerk,
2. dem Verzeichnis,
3. dem Dateinamen und
4. der Dateierweiterung.
Wie z.B.: D:\Verzeichnis1\Verzeichnis2\DATEINAME.EXT.
Das Laufwerk besteht aus einem einzelnen Buchstaben von A bis Z, dem
ein Doppelpunkt ":" folgt. Der verbleibende Teil eines Pfads besteht
aus einander ähnlichen Komponenten, die durch einen einzelnen Backslash
"\" voneinander abgegrenzt sind. Die letzte Komponente wird auch Datei-
name genannt. Jede dieser Komponenten kann aus einem Namen mit bis zu
acht Zeichen und einer Erweiterung mit bis zu drei Zeichen bestehen.
Die beiden Teile werden durch einen einzelnen Punkt "." voneinander ab-
gegrenzt. Auch wenn die Erweiterung fehlen kann, muß der Dateiname min-
destens EIN Zeichen lang sein.
Beachte: Der Begriff Dateiname ist nicht nur auf Dateien im üblichen
Sinn beschränkt; er kann sich auch auf jeden anderen sichtbaren Namen
in einem Verzeichnis, Unterverzeichnis oder auch einer Laufwerksbe-
zeichnung (Volume label) beziehen.
Um die Eingabe eines Pfads zu erleichtern, kann der Benutzer statt
einen absoluten einen relativen Pfad angeben. Bei einem relativen Pfad
können eine oder mehrere Komponenten fehlen:
- Wenn kein Laufwerk, d. h. kein Doppelpunkt angegeben ist, wird dem
Pfad das aktuell ausgewählte Laufwerk vorangestellt.
- Wenn dem Verzeichnis kein Backslash vorangestellt oder überhaupt
kein Verzeichnis angegeben ist, wird das aktuelle Laufwerksver-
zeichnis direkt hinter dem Doppelpunkt eingefügt.
- Einige Programme hängen möglicherweise eine fehlende Erweiterung an
die allerletzte Dateinamenkomponente an.
Nehmen wir zum Beispiel die aktuellen Verzeichnisse an:
Laufwerk: aktuelles Verzeichnis:
C: \FREEDOS\HELP
D: \TEMP\TEXT
Das aktuell ausgewählte Laufwerk ist C:.
1. C:\
Das Rootverzeichnis von Laufwerk C:
2. .
Das aktuelle Arbeitsverzeichnis, also: C:\FREEDOS\HELP
3. ..
Das übergeordnete Verzeichnis, also: C:\FREEDOS
4. D:
Das aktuelle Verzeichnis von Laufwerk D:, also: D:\TEMP
5. D:.
Das aktuelle Verzeichnis von Laufwerk D:, also: D:\TEMP
6. D:..
Das übergeordnete Verzeichnis von Laufwerk D:, also: D:\
7. ..\BIN
Da am Anfang weder ein Laufwerk noch ein führender Backslash
vorhanden ist, wird vor dem angegebenen Pfad sowohl das aktuell
ausgewählte Laufwerk als auch das aktuelle Verzeichnis dieses
Laufwerks eingefügt, also: C:\FREEDOS\HELP\..\BIN. Die einge-
bettete Komponente .. hat dieselbe Bedeutung wie allein ange-
geben: übergeordnetes Verzeichnis, allerdings hier im Kontext
des Verzeichnisses:
C:\FREEDOS\HELP\ .
Das bedeutet, dass der endgültige absolute Pfad C:\FREEDOS\BIN
lautet.
Pfadangaben, die nicht dem oben genannten Format entsprechen, führen zu
unterschiedlichem Verhalten der verschiedenen Programme, da es keinen
Standard zum Scannen, Analysieren und Interpretieren solcher Muster
gibt.
Zu den Problemen gehören:
- mehrere Backslashes,
- mehrere Punkte,
- mehrere Doppelpunkte oder ein Doppelpunkt an einer Position ung-
gleich zwei,
- das aktuelle Verzeichnis . oder übergeordnete Verzeichnis ..
spezielle Verzeichnisse im Zusammenhang mit einem Rootverzeichnis,
wie C:\., C:\.. oder C:\TEMP\..\.. .
Beachte: Die speziellen Verzeichnisse . und .. sind keine Phantomver-
zeichnisse oder virtuelle Einträge, sondern Standardeinträge jedes Ver-
zeichnisses mit Ausnahme der Rootverzeichnisse.
Diese Einträge helfen Wiederherstellungstools wie CHKDSK oder SCANDISK,
nach einem Absturz Fehler in der Verzeichnisstruktur zu finden und sie
zu einer gültigen Verzeichnisstruktur wiederherzustellen. Daher ist
eine allgemeine Annahme, dass ein Verzeichnis mit drei Punkten "..."
ein übergeordnetes Verzeichnis des übergeordneten Verzeichnisses bedeu-
tet, falsch, sie könnte aber von bestimmten Programmen unterstützt
werden.
Standardregeln für Optionen:
Optionen werden mit einem Schrägstrich "/" eingeleitet, das folgende
Zeichen kennzeichnet die Option und wird als Optionszeichen bezeichnet,
zum Beispiel: /A . Einige Befehle akzeptieren nicht nur ein einzelnes
Zeichen sondern auch lange Optionsnamen, bei denen ein ganzes Wort
die Option identifiziert, z. B. /MSG.
Einige Optionen können in Verbindung mit einem Argument verwendet wer-
den. Das Argument wird an die Option mit einem Doppelpunkt ":" oder
einem Gleichheitszeichen "=" angehängt, zum Beispiel: /A:hr oder
/P=fdexec.bat.
Mehrere Optionen ohne Argument können zu einer einzigen Option mit oder
ohne eingebettete Schrägstriche zusammengeführt werden, z. B. /WS oder
/W/S, anstatt /W /S.
Da einige Befehle jedoch lange Optionsnamen akzeptieren, ist die Metho-
de mit eingebetteten Schrägstrichen sicherer und wird deshalb empfohlen.
Eine Option mit Argument kann aber an der letzten Stelle solcher zusam-
mengeführter Optionen stehen.
Optionen ohne Argumente aktivieren oder deaktivieren bestimmte Funk-
tionen. Daher werden diese Optionen manchmal als Boolesche Optionen
oder Flags bezeichnet.
Booleschen Optionen kann optional ein Plus-"+"- oder Minus-"-Zeichen
vorangestellt werden. Die Boolesche Option O kann also auf drei Arten
geschrieben werden:
1. /+O: Die Option ist aktiviert.
2. /-O: Die Option ist deaktiviert.
3. /O: (weder Plus- noch Minuszeichen) Die Option wird umgeschaltet
oder umgedreht; das heißt, wenn die Option aktuell aktiviert
ist, ist sie deaktiviert; wenn sie aktuell deaktiviert ist,
ist sie jedoch aktiviert.
Ohne Benutzereingriff ist eine boolesche Option standardmäßig deak-
tiviert, sodaß sich /+O und /O die meiste Zeit gleich verhalten.
Einige Befehle ermöglichen es dem Benutzer jedoch, die Standardein-
stellungen bestimmter Optionen zu ändern, z. B. COPY und DIR.
E/A Umleitung:
Unter DOS können die Standardeingabe und -ausgabe auf eine Datei oder
ein anderes Gerät umgeleitet werden. Obwohl die Verwendung dieser
E/A-Streams heute üblich ist, ignorieren sie manche feige Programmierer
aus Gründen der Geschwindigkeit oder der Programmgröße.
Wenn der Eingabe-Stream auf eine Datei oder ein Gerät umgeleitet wird,
werden die Zeichen aus der Datei oder dem Gerät gelesen, anstatt die
Tastatur abzufragen und den Benutzer aufzufordern, interaktiv Zeichen
über die Tastatur einzugeben. Normalerweise beenden sich diese Pro-
gramme, wenn die Datei vollständig gelesen wurde.
Wenn der Ausgabe-Stream zu einer Datei oder einem Gerät umgeleitet
wird, werden die Informationen nicht auf dem Bildschirm ausgegeben,
sondern in die Datei oder das Gerät geschrieben. Gemäß Konvention hat
jedes Programm zwei Ausgabeströme: einen (Standardausgabe genannt) zur
Ausgabe normaler Informationen und einen (Standardfehlerausgabe ge-
nannt) für Fehlermeldungen, die der Benutzer nicht übersehen sollte.
Umleitungen werden in der Befehlszeile angegeben und wirken sich genau
auf den hier aufgerufenen Befehl aus, unabhängig davon, ob es sich um
einen externen oder internen Befehl, einen Alias oder ein BATCH-
Skript handelt. Die absolute Ausnahme ist der FOR-Befehl, bei dem die
Umleitung auf den hinter dem Schlüsselwort DO angegebenen Befehl und
nicht auf FOR selbst angewendet werden muss.
Wenn in der Befehlszeile mehrere Umleitungen angegeben sind und diese
denselben Daten-Stream (Eingabe, Ausgabe oder Fehler) betreffen, hat
die Umleitung ganz rechts Vorrang vor allen vorherigen.
Umleitungen werden syntaktisch wie folgt angegeben:
Operator Ziel
Operator ::= '<' | '>' [ '>' ] [ '&' [ '>' ] ]
Ziel ::= Datei | Gerät
Obwohl es nicht relevant ist, wo die Umleitungen in der Befehlszeile
platziert werden, ist es üblich, sie am Ende der Befehlszeile zu
platzieren.
Die Operatoren haben folgende Bedeutung:
Operator Umleitung
< Eingabe-Stream
> Ausgabe-Stream; target file is overwritten
>> Ausgabe-Stream; die Ausgabe wird an das Ziel angehängt,
falls es bereits existiert
>& Ausgabe- und Fehler-Stream; Zieldatei wird überschrieben
>>& Ausgabe- und Fehler-Stream; die Ausgabe wird an das Ziel
angehängt, falls es bereits existiert
>&> Fehler-Stream; die Zieldatei wird überschrieben
>>&> Fehler-Stream; die Ausgabe wird an das Ziel
angehängt, falls es bereits existiert
Beispiele:
Beispiel 1:
cmd <in1 <in2
Der Eingabe-Stream wird in die Datei IN2 umgeleitet, da diese sich
ganz rechts befindet.
Beispiel 2:
cmd <in >out
Der Eingabe-Stream wird in die Datei IN umgeleitet, die Ausgabe- und
Fehler-Streams werden zusammengeführt und in die Datei OUT umgeleitet.
Wenn die Datei OUT bereits existiert, wird der alte Inhalt verworfen
und durch den neuen ersetzt; andernfalls wird die Datei OUT neu
erstellt.
Beispiel 3:
cmd <in >>out
Wie Beispiel 2, aber anstatt den Inhalt von OUT zu ersetzen, werden,
wenn die Datei bereits existiert, die neuen Informationen an das Ende
der Datei angehängt.
Beispiel 4:
FOR %a IN (*.*) DO ECHO %a >out
Wie bereits erwähnt, ist FOR eine Ausnahme und leitet die Weiterlei-
tungen an jeden Aufruf des rechts neben dem Schlüsselwort DO ange-
gebenen Befehls weiter. Dieses Beispiel überschreibt also die Ausgabe-
datei jedes Mal, wenn der ECHO-Befehl
ausgeführt wird, also anstatt eine Dateiliste zu erstellen, wird nur
die zuletzt gefundene Datei in OUT aufgezeichnet.
Beispiel 5:
IF EXIST out DEL out
FOR %a IN (*.*) DO ECHO %a >>out
Diese Sequenz beseitigt das Problem, der IF Befehl ist erforderlich,
um die Datei tatsächlich zu ersetzen, anstatt die Dateiliste an die
wahrscheinlich vorhandene Datei anzuhängen.
Pipes
Eine andere Form der Umleitung ist das Piping. Dabei wird der Ausgabe-
Stream eines Befehls mit dem Eingabe-Stream eines anderen Befehls ver-
bunden. Pipes können auf diese Weise eine beliebige Anzahl von Befeh-
len miteinander verbinden. Da DOS kein Multitasking-System ist, werden
Pipes dadurch simuliert, daß der erste Befehl mit einer Ausgabeumlei-
tung die die ausgegebenen Informationen in einer temporäre Datei er-
fasst, und dann der zweite Befehl mit einer Eingabeumleitung
aus dieser temporären Datei. Nach Abschluss des zweiten Befehls wird
die temporäre Datei gelöscht.
Beispiele:
Beispiel 1:
cmd1 | cmd2 | cmd3
Was ähnlich ist wie diese Sequenz:
cmd1 >%TEMP%\t1
cmd2 <%TEMP%\t1 >%TEMP%\t2
DEL %TEMP%\t1
cmd3 <%TEMP%\t2
DEL %TEMP%\t2
Beispiel 2:
Der erste und der letzte Befehl können eine Eingabe- bzw. Ausgabeum-
leitung haben, etwa wie folgt:
cmd1 | cmd2 | cmd3 <in >out
Was ähnlich ist wie diese Sequenz:
cmd1 >%TEMP%\t1 <in
cmd2 <%TEMP%\t1 >%TEMP%\t2
DEL %TEMP%\t1
cmd3 <%TEMP%\t2 >out
DEL %TEMP%\t2
Beispiel 3:
Der Fehler-Stream kann auch gepiped werden:
cmd1 |& cmd2 | cmd3
Was ähnlich ist wie diese Sequenz:
cmd1 >&%TEMP%\t1
cmd2 <%TEMP%\t1 >%TEMP%\t2
DEL %TEMP%\t1
cmd3 <%TEMP%\t2
DEL %TEMP%\t2
Hier werden nur die Fehlermeldungen von cmd1 an cmd2 übergeben; die
Fehlermeldungen von cmd2 und cmd3 werden auf dem Bildschirm ausgegeben.
Verschachtelte Weiterleitungen:
Bei BATCH-Skripten oder wenn externe Programme andere Programme oder
eine andere Shell aufrufen, können Weiterleitungen verschachtelt sein,
z. B.:
Sehen Sie sich die BATCH-Datei BATCH.BAT an:
@ECHO OFF
ECHO 1
ECHO 2 >aus_2
ECHO 3
die aufgerufen wird über:
BATCH >aus_1
Wenn das Skript BATCH ausgeführt wird, wird der eigentliche Aus-
gabe-Stream in die Datei "aus_1" umgeleitet. Daher wird die Ausgabe
des ersten ECHO-Befehls in diese Datei umgeleitet.
Da der zweite ECHO-Befehl eine eigene Ausgabeumleitung hat, wird seine
Ausgabe in die Datei "aus_2" umgeleitet. Nach Abschluss von ECHO wird
die Umleitung geschlossen und die vorherige wiederhergestellt.
Dies führt dazu, dass die Ausgabe des dritten ECHO-Befehls
wieder in "aus_1" umgeleitet wird.
Wildcards
DOS akzeptiert bestimmte Wildcards (Platzhalter) anstelle von Dateien,
sodass Sie eine oder mehrere Dateien mit demselben Wildcard-Muster an-
geben können. Im Gegensatz zu anderen Systemen erweitert jedes Programm
Platzhalter individuell, anstatt dies der Shell zu überlassen. Die Shell
muß jedoch die Platzhalter für ihre internen Befehle erweitern. FreeCOM
unterstützt die Standard-DOS-Platzhalter, die auch vom DOS-Kernel
selbst unterstützt werden:
Wildcard Bedeutung
* Jede verbleibende mögliche Zeichenkette, bis auf einen
Punkt (.)
? Jedes Zeichen außer den DOS Punkt (.); wenn es das letzte
Zeichen ist, fungiert es als *
Wildcards sind im letzten Teil eines qualifizierten Pfads erlaubt,
d. h. hinter dem letzten Backslash (\) oder Doppelpunkt (:). Wildcards
passen entweder vor oder hinter den Punkt, der den Dateinamen und seine
Erweiterung trennt. Ob Verzeichnisse, Datenträgerbezeichnungen oder
versteckte Dateien und Systemdateien einem Muster entsprechen, hängt
vom Befehl ab, der es erweitert. Bei Buchstaben wird die Groß-/Klein-
schreibung nicht beachtet.
Beispiele:
Muster Bedeutung
*.* Irgendeine Datei im aktuellen Verzeichnis
c:*.* Irgendeine Datei im aktuellen Arbeitsverzeichnis des
Laufwerks C:
* Irgendeine Datei ohne Erweiterung. Einige Befehle, wie
z.B. DIR interpretieren ein einzelnes * als *.*
a*.* Jede Datei, deren erstes Zeichen ein A ist; weder der
Rest des Dateinamens noch die Dateierweiterung sind von
Bedeutung.
a?.* Das Gleiche wie oben
a???.* Das Gleiche wie oben
a*b.* Das Gleiche wie oben
a?b.* Jede Datei, deren erstes Zeichen ein A und das dritte
ein B ist; die restlichen Zeichen und die Erweiterung
sind unwichtig
file?.txt Alle Dateien, deren erste vier Zeichen FILE sind und
deren Erweiterung TXT lautet.
\scripts\*.pl Alle Perl-Dateien im Verzeichnis \SCRIPTS im Stammver-
zeichnis des aktuell ausgewählten Laufwerks
Achtung: Es gibt im Zusammenhang mit Platzhaltern häufig Fehler, da
DOS weniger funktionale Platzhalter als andere Systeme hat, insbe-
sondere:
a*bc.*txt: Alle Zeichen rechts von einem Sternchen * bis zum Punkt
"." oder dem Ende des Dateinamens werden ignoriert;
dieses Muster entspricht: a*.*.
a?.?: Ein Fragezeichen ? als letztes Zeichen entweder des
Dateinamens oder der Dateierweiterung hat die gleiche
Wirkung wie ein Sternchen * und bedeutet nicht genau ein
beliebiges Zeichen, insbesondere muß kein Zeichen vor-
handen sein; dieses Muster entspricht einem a*.*
Die Shell ermöglicht durch das Schreiben von BATCH-Skripten die Automa-
tisierung einfacher Aufgaben. Dies sind reine Textdateien, in denen in
einer Zeile jeweils nur ein Befehl steht. Alle Befehle, sowohl interne
als auch externe, können, zusammen mit Umleitungen, Pipes, UMGEBUNGS-
VARIABLEN-Ersetzungen usw., in BATCH-Skripten verwendet werden. Das
Skript wird Zeile für Zeile ausgeführt. Die Zeilen werden standardmäßig
vor der Ausführung auf dem Bildschirm angezeigt.
Um dies zu verhindern, kann mit dem Befehl ECHO diese Funktion abge-
schaltet oder jeder Zeile das ad-Zeichen (@) vorangestellt werden,
z. B.:
ECHO Diese Zeile wird angezeigt
@ECHO Diese Zeile wird NICHT angezeigt
Normalerweise beginnen BATCH-Skripte mit der Zeile:
@ECHO OFF
um während der Skriptverarbeitung die weitere Wiedergabe jeder Zeile
und auch die Wiedergabe der Zeile selbst zu unterdrücken.
Zeilen, die mit einem Doppelpunkt (:) beginnen, kennzeichnen diese
bestimmte Skriptzeile, zu der mit dem Befehl GOTO gesprungen
werden kann, z. B.:
@ECHO OFF
IF "%1"=="" GOTO anwendung
ECHO Argument1=%1
ECHO Argument2=%2
ECHO Argument3=%3
GOTO end
:anwendung
ECHO Anwendung: %0 {Argumente}...
:end
Wenn das Skript ohne Argument aufgerufen wird, führt Zeile 2 den GOTO-
Befehl aus und überspringt somit die Zeilen 3 bis 7 und fährt mit Zeile
8 fort. Andernfalls werden die drei ECHO-Befehle aufgerufen und der
GOTO-Befehl in Zeile 6 überspringt das ECHO der Fehlermeldung in Zeile
8 und fährt mit Zeile 9 fort. Stößt die Shell auf eine Zeile, die mit
einem Doppelpunkt beginnt, wird diese stillschweigend übersprungen;
im Gegensatz zum REM-Befehl werden nicht einmal Umleitungen ausgewer-
tet. Wenn die Shell das Ende der Datei erreicht, wird die BATCH-Ver-
arbeitung beendet. Der Fehlerlevel des zuletzt erzeugten externen Be-
fehls bleibt unverändert. Da die Shell das BATCH-Skript schließt und
es jedes Mal neu öffnet, wenn ein Befehl (sowohl interne als auch ex-
terne) aufgerufen wird, können Disketten während einer BATCH-Verar-
beitung sicher ausgetauscht werden, z. B.:
@ECHO OFF
ECHO Kopiere Disk1
COPY Dateien\*.* C:%1
:disk2
PAUSE Legen Sie Diskette #2, ein und drücken ENTER
IF NOT EXIST disk2 GOTO disk2
ECHO Kopiere disk2
COPY Dateien\*.* C:%1
:disk3
PAUSE Legen Sie Diskette #3, und drücken ENTER
IF NOT EXIST disk2 GOTO disk3
ECHO Kopiere disk3
COPY Dateien\*.* C:%1
ECHO Kopieren beendet.
Wenn eine BATCH-Datei innerhalb einer anderen BATCH-Datei aufgerufen
wird, wird die vorherige Datei unabhängig von der Verschachtelungs-
ebene nicht nicht fortgesetzt, sobald die aufgerufene beendet ist; dies
wird als Verkettung bezeichnet, eine Datei verkettet sich mit einem
anderen Programm und beabsichtigt nicht, zurückzukehren. Damit sich ein
BATCH-Skript in dieser Hinsicht wie ein externes Programm verhält, muß
es über den CALL-Befehl aufgerufen werden, z. B.:
BATCH1.BAT:
@ECHO OFF
ECHO %0 - Zeile 2
CALL batch2
ECHO %0 - Zeile 4
und
BATCH2.BAT:
ECHO %0 - Zeile 1
zeigt:
BATCH1 - Zeile 2
BATCH2 - Zeile 1 (BATCH2!)
BATCH1 - Zeile 4
Versteckte interne Befehle:
Es gibt einige spezielle interne Befehle, die weder direkt sichtbar
noch zugänglich sind. Sie sind aus zwei Hauptgründen ausgeblendet:
1. Viele von ihnen sind interner Natur und sollten vom Benutzer
nicht verwendet werden.
2. Sie sind Erweiterungen der normalen BATCH-Sprache und können
daher mit einer bestimmten Installation kollidieren. Um diesen
Konflikt zu vermeiden, sind diese Befehle standardmäßig ausge-
blendet und können über den ICMD-Befehl direkt zugänglich gemacht
werden.
Auf ausgeblendete interne Befehle kann zugegriffen werden, indem "::="
dem Befehl vorangestellt wird. Dieses Token gibt normalerweise eine
Bezeichnung innerhalb der BATCH-Sprache an. Aufgrund der Art der
Bezeichnungen können es auch Kommentare sein. Aufgrund der letzteren
Variante sehen die meisten Nicht-FreeCOM-Shells das ::= nicht und
ignorieren daher diese Befehle.
Beispiel: C> ::=CANCEL 30
bricht alle derzeit aktiven BATCH-Dateien ab (beendet sie) und weist
den Errorlevel 30 zu.
Siehe auch:
@
batch
command.com/freecom
echo
Errorlevel
goto
Umgebungsvariable
Copyright © 2006 the FreeDOS command.com team,
2024 von W. Spiegl and die FreeDOS Hilfe angepasst.
Diese Datei ist abgeleitet vom FreeDOS Spezifikationen-HOWTO.
Vgl. auch die Datei H2Cpying bezüglich der Kopierbedingungen.