Batch-Programmierung: Wichtige DOS-Kommandos

Aus Wikibooks


Bei den auch sogenannten Batch-Befehlen wird grundsätzlich zwischen internen und externen Befehlen unterscheiden (vergleiche FreeDOS-Kompendium: Befehle). Die Enthaltenen (Internen) sind Bestandteil des jeweiligen Befehlsinterpreters selbst, während die nicht enthaltenen (externen) Befehle gegebenenfalls als eigene Programme vorliegen. Unabhängig davon sind Befehle (oder auch sogenannte Kommandos), die wichtig für die Batch-Programmierung sein könnten, im Folgenden aufgeführt.


Befehle[Bearbeiten]

Einzelne Befehle:

assoc[Bearbeiten]

Mit Hilfe dieses Befehls kann man die Dateierweiterungen bearbeiten bzw. anzeigen lassen.

assoc [.dateiendung[=Dateibeschreibung]]

attrib[Bearbeiten]

Ändert die Eigenschaften (oder auch sogenannten Attribute) unter anderem von Dateien und Ordnern.

Mögliche Eigenschaften[Bearbeiten]

Folgende (aus DOS-FAT geerbte) Eigenschaften sind möglich:

  • R – für „schreibgeschützt“ (im Englischen read only genannt)
  • H – … „versteckt“ (englisch hidden)
  • S – … „systemversteckt“ oder auch „zum Betriebssystem gehörend“ (mit gesetzter Eigenschaft auch „Systemdatei“ genannt)
  • D – … „Ordner“ oder auch „Verzeichnis“ (englisch directory); diese Eigenschaft war bis einschließlich Windows XP nicht sichtbar und wurde frühestens mit Windows Vista auch im Windows-Explorer anzeigbar
  • A – … „zu archivierende Datei“ (auch „Archiv“ genannt)

Mit Windows NT (und dessen NTFS) wurden unter anderem folgende Eigenschaften ergänzt:[1]

  • N – für „keine“ (englisch none)
  • L – … „(symbolischen Datei-)Verknüpfung“ oder „(Ordner-)Verbindung“[2] (auch Abzweigungspunkt und im Englischen allgemein link genannt)
  • C – … „verdichtet“, „zusammengepreßt“ oder auch „komprimiert“ (englisch compressed)
  • I – … „nicht verschlagwortet“ oder auch „nicht indiziert[3]
  • E – … „verschlüsselt“ (englisch encrypted); ist (bisher) ggf. nur im Windows-Explorer anzeig- und änderbar

Weitere Eigenschaften:

  • O – für das (im Amerikanisch-Englischen) sogenannte Offline attribute[4]
  • X – … No scrub file attribute,[4] (wahrscheinlich) für „nicht löschbar“ oder „nicht löschen“
  • V – … Integrity attribute;[4] wahrscheinlich für ChkDsk (und ähnliche Hilfsanwendungen zur Integritätsprüfung)
  • P – … Pinned attribute[4]
  • U – … Unpinned attribute[4]

Beispiele[Bearbeiten]

In folgendem Beispiel wird einer zuvor angelegten und „Beispieldatei.txt“ genannten Daten der (ggf. vorhandene weiche[5]) Schreibschutz entzogen und zudem die selbe Datei versteckt:

attrib Beispieldatei.txt -r +h

Im Folgendem wird einem zuvor angelegten und „Beispielordner“ genanntem Ordner der (weiche) Schreibschutz hinzugefügt:

attrib Beispielordner +r

Und im Folgendem wird einem zuvor ebenso angelegten Ordner (mit +i) das auch sogenannte Index-Bit angefügt, welches bewirkt, daß dessen Inhalte nicht mehr (wie in der Vorgabe von Microsoft, ohne I) für eine (angeblich) schnelle Dateisuche indiziert (oder übersetzt: verschlagwortet) werden. Zudem sind dort am Zeilenende zwei Schalter angefügt, um (mit /s) neben dem genannten Ordner auch all seine Unterordner und (mit /d) auch jene Ordner selbst entsprechend von der (üblicherweise im Hintergrund – über den in Windows XP auch sogenannten „Indexdienst“ – ausgeführten) Verschlagwortung auszuschließen:

attrib Beispielordner +i /s /d

cacls[Bearbeiten]

Ändert die Zugriffsrechte (über die im Amerikanisch-Englischen sogenannten Access Control Lists) auf NTFS-Partitionen oder zeigt diese an.

Beispiele[Bearbeiten]

Rechte vergeben[Bearbeiten]

Der folgende Befehl fügt beispielsweise dem Benutzer „Albert Einstein“ (mit der Eigenschaft C, wie change) das Recht zum „Ändern“ hinzu – dies (über die Platzhalter *.*) für alle Dateien und Ordner im aktuellen und (mit dem Schalter /T, wie tree) zudem auch in allen Unterordnern (oder auch im dazu untergeordneten Verzeichnisbaum).

cacls *.* /E /T /G "Albert Einstein:C"

Über den Schalter /E werden zudem die Rechte bearbeitet, anstatt sie (wie in der Vorgabe – ohne den Schalter) zu ersetzen.

Rechte entziehen[Bearbeiten]

Der folgende Befehl hebt die zuvor vergebene Berechtigung wieder auf.

cacls *.* /E /T /R "Albert Einstein"

Über den folgenden Befehl können die Zugriffsrechte für die einzelne ebenda genannte Datei so geändert (genauer über den Schalter /P so ersetzt) werden, daß jedem (englisch everyone) alle Rechte (mit der Eigenschaft N, wie das englisch none, für „keine [Rechte]“) entzogen werden.[6]

cacls %windir%\system32\jscript.dll /E /P everyone:N

cd / chdir[Bearbeiten]

Über den cd- oder auch chdir-Befehl (kurz für das englische change directory, wörtlich „wechsel Verzeichnis“) kann das aktuelle Verzeichnis gewechselt werden. Beachte: Nach dem cd folgt üblicherweise ein Leerzeichen, welches bei nachfolgendem .. oder \ (je nach Betriebssystemversion) aber auch weggelassen werden kann. Wird der Befehl ohne Übergabewert ausgeführt, so wird der Pfad des aktuellen Verzeichnisses ausgegeben.

relative Angaben:
Die Eingabe von "cd .." wechselt in das nächsthöhere Verzeichnis ("cd ..\.." zwei Ebenen höher usw.).
Die Eingabe von "cd ORDNERNAME" wechselt in den Unterordner ORDNERNAME.

absolute Angaben:
Die Eingabe von "cd %~dp0" wechselt in das Verzeichnis aus dem die Batchdatei aufgerufen wurde.
Die Eingabe von "cd \" wechselt in das Hauptverzeichnis auf dem derzeitig befindlichen Laufwerk.
Die Eingabe von "cd \ORDNERNAME" wechselt absolut in den Ordner ORDNERNAME auf dem derzeitig befindlichen Laufwerk.
Die Eingabe von "LAUFWERKSBUCHSTABE:" (ohne vorangestelltes "cd") wechselt in das aktuelle Verzeichnis des gewählten Laufwerks LAUFWERKSBUCHSTABE.
Die Eingabe von "cd LAUFWERKSBUCHSTABE:\ORDNERNAME" wechselt absolut in den Ordner ORDNERNAME auf dem gewählten Laufwerk von LAUFWERKSBUCHSTABE jedoch nicht von einem Laufwerk auf ein anderes.
Pfadangaben mit Leerschlägen (Bsp "C:\program files\") müssen in Anführungs-/Schlusszeichen eingeschlossen sein.
Der Parameter /D bewirkt, dass zusätzlich zum Wechseln des Verzeichnisses auch das aktuelle Laufwerk gewechselt wird. Der Befehl "cd /D %~dp0" wechselt in den Ordner des Batch-Skripts. (sinnvoll bei Windows-Doppelklicks)

Wildcards:
Ist die Pfadangabe eindeutig kann der Ordnername durch Nutzen von Wildcards (z.b. \win* für \windows oder \winnt) abgekürzt werden. Dies ist jedoch im Batchbetrieb nicht ratsam.

Remotesysteme:
Pfade von nicht als Laufwerken verbundenen Remotesystemen können (Berechtigung vorausgesetzt) entweder über die Administrative Freigabe oder durch das Verbinden eines Netzlaufwerks angesprochen werden. Beispiel für administrative Freigabe: \\[computername]\[laufwerk]$\[Weiterer Pfad]

Pfad in Variable:
Der Befehl set PFAD=%cd% schreibt das aktuelle Verzeichnis in die Variable %PFAD%. (Als letztes im Batch-Script mit cd %PFAD% wieder ins Startverzeichnis wechseln!)

comp oder fc[Bearbeiten]

Vergleicht den Inhalt zweier Dateien und stellt die Unterschiede dar (compare / file compare).

(x)copy/robocopy[Bearbeiten]

Mit dem Befehl copy können eine Datei oder mehrere Dateien kopiert werden.

xcopy ist die erweiterte Version von copy, die mehr Optionen bietet. Diese ist nicht in allen Windows-Versionen verfügbar.

Das weitaus mächtigere robocopy ist ab Vista standardmäßig wieder verfügbar, bei Windows XP und 2000 fehlt dieses Programm zunächst. Microsoft stellt robocopy aber im Windows Server 2003 Resource Kit Tools 2003 auch für diese Betriebssystemversionen bereit.

Mit dem Befehl copy /b "DATEI" + "DATEI" "NEUE DATEI" kann man Dateien zusammenfügen.

del / erase[Bearbeiten]

Löscht eine Datei, die sich im aktuellen Verzeichnis befindet. Als Parameter muss mindestens der Dateiname angegeben werden. Weitere Parameter sind optional:

  • /p – sollen mehrere Dateien gelöscht werden, muss jede einzelne Löschung bestätigt werden.
  • /f – auch schreibgeschützte Dateien werden gelöscht.
  • /s – löscht auch Dateien, die sich in den Unterverzeichnissen befinden.
  • /q – Unterbindet Bestätigung.

Beispiel:

erase "H:\zulöschende Datei.bat"

deltree[Bearbeiten]

Löscht Verzeichnis(se) inkl. untergeordnete Dateien.

Unter Windows XP lautet der Befehl rmdir. Deltree kennt es nicht mehr. Anmerkung: rmdir/rd versteht keine Wildcards ('*' oder '?') im Verzeichnisnamen.

dir[Bearbeiten]

Der Befehl dir (kurz für das englische directory) zeigt alle Verzeichnisse und Unterverzeichnisse an. Verzeichnisse werden seit Windows 95 als Ordner bezeichnet, unterscheiden sich allerdings nicht von Verzeichnissen.

Der dir-Befehl hat zahlreiche Optionen:

  • /b – Nur der Dateiname wird ausgegeben. Die Ausgabe aller weiteren Informationen wie beispielsweise Datum, Größe oder Datenträgerbezeichnung wird unterdrückt.
  • /c – Die Dateigröße wird mit einem Punkt als Trennzeichen zwischen jeweils drei Dezimalstellen angegeben, also beispielsweise 343.232 (Standardeinstellung). Soll dies unterdrückt werden, geben Sie den Schalter /-c an.
  • /p – Bei jedem Seitenumbruch wird die Ausgabe unterbrochen, bis der Anwender eine Taste drückt.
  • /on – Gibt das Verzeichnis alphabetisch sortiert aus.
  • /w – Mehrere Einträge in einer Zeile werden angezeigt.
  • /ah – Versteckte Dateien werden angezeigt.
  • /a – Alle versteckten- und System-Dateien werden angezeigt.
  • /s – Zeigt auch den Inhalt der Unterverzeichnisse an.

Mit dem Befehl dir [Dateiname] ist es auch möglich, Dateien im aktuellen Verzeichnis zu suchen. Alternativ kann auch der Platzhalter * (bspw.: dir *.*) verwendet werden, um nach bestimmten Dateien zu suchen.
Mit dir *. werden nur Objekte ohne Dateinamen-Erweiterung angezeigt. In der Regel haben Ordner keine Erweiterung und Dateien eine Erweiterung. In diesem Fall werden nur Ordner angezeigt. Gewöhnliche Ordner werden mit <DIR> vor dessen Namen gekennzeichnet und Ordnerverbindungen mit <VERBINDUNG> (oder auf nicht oder nur teilweise übersetzten Cmd-Ausgaben mit <JUNCTION>).

Kombinationen[Bearbeiten]

dir /w/o/s/p    durchsucht den aktuellen Pfad inklusive Unterordner
nach einer Datei und stellt das Ergebnis seitenweise dar!

edit[Bearbeiten]

Mit edit wird ein Editor geöffnet, zum Beispiel zum Bearbeiten von Batch- oder Textdateien.

Ab Windows NT nur noch in 32 bit Systemen enthalten.

find[Bearbeiten]

Mit dem Befehl find kann - auch in mehreren Dateien - nach einer Zeichenfolge gesucht werden.

Auch find kann mit Parametern gesteuert werden:

  • find /i ignoriert Groß-/Kleinschreibung beim Suchbegriff
  • find /v Zeigt alle Zeilen an, die die Zeichenfolge NICHT enthalten.
  • find /c Zeigt nur die Anzahl der die Zeichenfolge enthaltenden Zeilen an.
  • find /n Zeigt die Zeilen mit ihren Zeilennummern an.

format[Bearbeiten]

Formatiert die Festplatte oder Diskette. Mit format c: wird die Festplatte c: formatiert. Mit format a: wird die Diskette im Laufwerk a: formatiert. Mit format c: -s bzw. format a: -s kann man die Festplatte/Diskette mit Systemdateien formatieren, so dass sie nachher bootfähig sind.

loadhigh[Bearbeiten]

Lädt Programme in freie UMB Upper-Memory-Blocks

md / mkdir[Bearbeiten]

Der Befehl md (make directory) legt ein neues Verzeichnis an.

more[Bearbeiten]

Mit der Ausgabeumleitung | more (bspw.: type [Dateiname] | more ) wird bei Seitenwechsel zur Bestätigung aufgefordert.
Damit besteht die Möglichkeit über mehrere Seiten führende Dokumente anzuzeigen.

more ist der einzige Befehl, bei der auch in der DOS-Welt die sogenannte Pipe verwendet wird. Bei der Pipe handelt es sich um das Zeichen | (fehlt es auf der Tastatur, ist es auch bei hierzu gedrückt gehaltener ALT-Taste und der Eingabe der Zahlenfolge 124 auf dem Ziffernblock zu erzeugen; das Zeichen erscheint dann nach dem Loslassen der ALT-Taste). Mit diesem Zeichen ist es möglich, zwei Befehle miteinander auf eine spezielle Weise zu verbinden. Dabei wird der erste Befehl ausgeführt, seine Ausgaben werden jedoch nicht auf den Bildschirm geschrieben, sondern in einen Puffer. Der zweite Befehl wird auf eine Weise gestartet, dass er seine Eingaben nicht von der Tastatur, sondern von ebendiesem Puffer bekommt.

Mit more ist es ebenfalls möglich den Inhalt einer Datei an eine andere Datei anzuhängen.
So kann man zum Beispiel mit: more "C:\eins.txt" >> "D:\zwei.txt" den Inhalt der "eins.txt" an den Inhalt der "zwei.txt" anhängen. "eins.txt" wird dabei nicht verändert.

move[Bearbeiten]

Verschiebt (englisch moves) eine oder mehrere Dateien von einem Verzeichnis in ein anderes. Dieser befehl kann auch zu Umbenennung (englisch rename) mißbraucht werden.

Beispiel:

move .\Beispieldatei.txt ".\Unterordner\Beispieldatei.txt"

path[Bearbeiten]

Durch die Angabe eines Pfades wird das Betriebssystem auf der Kommandozeile dazu aufgefordert, neben dem aktuellen Verzeichnis auch in weiteren Verzeichnissen zu suchen. Wird der Befehl ohne Parameter ausgeführt, so werden alle aktuellen Pfade ausgegeben.

rd / rmdir[Bearbeiten]

Der Befehl rd oder rmdir (remove directory) löscht ein Verzeichnis, wenn dieses leer ist.

Parameter:

  • /s Löscht einen ganzen Verzeichnisbaum mit Dateien
  • /q Löscht ohne Nachfrage ganze Verzeichnisbäume. Kann in Batch-Dateien praktisch sein.

Der Verzeichnisname darf keine Platzhalter (wie * oder ?) enthalten.

Beispiel:

rmdir /s /q C:\temp

ren / rename[Bearbeiten]

Datei(en) und Ordner umbenennen – über den englischsprachigen Befehl rename und zudem kurz ren.

Beispiel:

rename Beispieldatei.txt "Beispieldatei mit neuem Bezeichner.txt"

start[Bearbeiten]

Syntax: START ["Titel"] [/D <Pfad>] [/I] [/MIN] [/MAX] [/SEPARATE | /SHARED] [/LOW | /NORMAL | /HIGH | /REALTIME] [/WAIT] [/B] [Befehl/Programm] [Parameter]

Optionen:

  • "Titel" Der Titel des neuen Fensters.
  • /D <Pfad> Startverzeichnis
  • /I Die neue Umgebung soll die dem CMD.EXE beim Aufruf übergebene sein und nicht die aktuelle Umgebung.
  • /MIN Startet das Fenster minimiert.
  • /MAX Startet das Fenster maximiert.
  • /SEPARATE Startet 16-Bit-Windows-Programm in separatem Speicherbereich.
  • /SHARED Startet 16-Bit-Windows-Programm in gemeinsamen Speicherbereich.
  • /LOW Startet Anwendung in IDLE-Prioritätsklasse.
  • /NORMAL Startet Anwendung in der NORMAL-Prioritätsklasse.
  • /HIGH Startet Anwendung in der HIGH-Prioritätsklasse.
  • /REALTIME Startet Anwendung in der REALTIME-Prioritätsklasse.
  • /WAIT Startet die Anwendung und wartet auf das Ende.
  • /B Startet die Anwendung ohne ein neues Fenster zu öffnen. Die Anwendung ignoriert STRG+C. Wenn die Anwendung nicht selbständig STRG+C überprüft, ist STRG+UNTBR die einzige Möglichkeit, um die Anwendung abzubrechen.
  • /? Gibt die Hilfe aus.

Erklärung:

  • Startet ein Programm (als neues eigenes Fenster).

Beispiel:

Auf Windows XP: Zum Öffnen eines neuen Konsolenfensters in dem eine Datei aufgerufen wird.

start "Name des neuen Fensters" /WAIT /D C:\temp /NORMAL call test.bat

/WAIT = Wartet bis Anwendung geschlossen wird.
/NORMAL = Startet Anwendung in der NORMAL-Prioritätsklasse.
/D = Danach folgt das Startverzeichnis

Nützliche (System)-Programme: Hier eine Liste der nützlichen (System)-Programme, die man so ausführen kann:

regedit.exe = neuer Registrierungseditor
(regedt32.exe = älterer Registrierungseditor)

explorer.exe = Windows Ordner Explorer
taskmgr.exe = Windows Taskmanager
taskeng.exe = Aufgabenplanungsmodul
calc.exe = Taschenrechner
mshta.exe = Scripthost für HTA (HTML) Scripting
msconfig.exe = Autostart verzeichnis

W/CScript.exe = Beides Bestandteil des Windows Scripthostes für JS und VBS

iexplore.exe = Microsoft Windows Internet Explorer, Standardbrowser für Windows
firefox.exe = Mozilla Firefox, Internetbrowser
dialer.exe = Windows-Hilfeprogramm für DFÜ Einwahlverbindungen
Notepad.exe = Standard-Textbearbeitungsprogramm von Microsoft

cmd.exe = Microsoft Windows Befehlsprozessor für Batch
winword = Microsoft Word

taskkill[Bearbeiten]

Ab Windows XP kann man mit diesem Befehl einen Prozess beenden, beispielsweise wenn dieser nicht mehr reagiert. Unter Einbindung von /t werden auch alle untergeordneten Prozesse beendet, und wenn man /f hinzufügt, wird das Beenden erzwungen.

taskkill  /im iexplore.exe /t /f

tasklist[Bearbeiten]

Dieser Befehl listet alle aktiven Prozesse auf, die gerade auf dem lokalen Rechner laufen. Damit lässt sich zum Beispiel der Name eines zu beendenden Prozesses ermitteln (siehe auch Befehl: taskkill). Mit dem hinzugefügten Schalter /nh werden die Spaltenüberschriften ausgeblendet.

Der Befehl tasklist ist erst ab Windows XP verfügbar.

type[Bearbeiten]

Gibt den (reinen Text-)Inhalt einer übergegebenen menschenlesbaren Datei (beispielsweise im *.bat, *.cmd oder *.txt-Format) aus.

type Beispieldatei.txt

Anwendungsbeispiel(e)[Bearbeiten]

Pfad der laufenden Batchdatei[Bearbeiten]

Es gibt Situationen, in denen es interessiert, in welchem Verzeichnispfad die laufende Batchdatei liegt; mit der Variable %~dp0 kann dieser (einschließlich dem Laufwerksbuchstaben) wie folgt (bspw. aus einer Beispiel.bat heraus) ausgeben werden:

@echo off
echo.Dieses Script liegt im Verzeichnispfad %~dp0
pause

Fußnoten[Bearbeiten]

  1. … diese sind ggf. (auch – ähnlich wie die Eigenschaft D) erst ab Windows Vista, spätestens aber mit Windows 10, vollständig über den attrib-Befehl (einschließlich dessen eigener Hilfe, über attrib /?) anzeig- und änderbar; im Windows-Explorer sind diese Eigenschaften ebenso spätestens ab Windows 10 auch (offen, in dessen Hauptfensterbereich, über die in der Vorgabe ausgeblendete Spalte „Attribute“) anzeig- und (größtenteils, wie im Folgenden beschrieben) änderbar; … ebenda in den jeweiligen (Datei- und Ordner-)Eigenschaften, über die ggf. vorhandene Schaltfläche Erweitert… und dann im damit zu öffnenden Fensterchen mit der Überschrift „Erweiterte Attribute“, über die jeweiligen Einstellungen, welche (durch ein [nicht] gesetztes Häkchen) an- oder abwählbar sind und ggf. zur abschließenden Änderung durch Drücken der dortigen OK-Schaltfläche bestätigt werden müssen
  2. in der (deutschsprachigen) Hilfe zum mklink-Befehl „Verzeichnisverbindung“ und in der (deutschsprachigen) Ausgabe vom dir-Befehl zudem kurz <VERBINDUNG> genannt
  3. … in der Hilfe des verwandten dir-Befehls (auf Windows 10 – oder früher, frühestens wohl ab Vista aufrufbar mit dir /?) wörtlich mit „I Nicht indizierte Dateien“ beschrieben; vergleiche zudem ggf. auch Wiktionary:de:indizieren und (als zugehörige Nebenform) …:indexieren – letzterer (Wörterbuch-)Eintrag u.a. auch mit „verschlagworten“; diese (Index-)Eigenschaft ist wohl auch frühestens ab Windows Vista über den erst dort entsprechend erweiterten attrib-Befehl anzeig- und änderbar
  4. 4,0 4,1 4,2 4,3 4,4 aus der zugehörigen (englischsprachigen) attrib-Hilfe (auf einem eigentlich deutschsprachigen Windows 10)
  5. … als Abgrenzung zum harten Schreibschutz, über die Zugriffsrechte (welche auch über den cacls-Befehl geändert werden können)
  6. Windows: Microsoft bringt Patch gegen Lücke im Internet ExplorerGolem, am 20.12.2018