Batch-Programmierung: Batch-Befehle
Aus Wikibooks
Inhaltsverzeichnis |
[Bearbeiten] @
Schaltet die Ausgabe der Befehlszeile auf dem Bildschirm nur für den aktuellen Befehl aus und ist selbst kein eigener Befehl.
Syntax
@befehl
Stapelanweisung: Ab MS-DOS bis Windows Vista
Beispiel:
Inhalt
echo Diese Zeile wird mit Befehlszeile ausgefuehrt... @echo und diese ohne!
Ausgabe
C:\>echo Diese Zeile wird mit Befehlszeile ausgefuehrt... Diese Zeile wird mit Befehlszeile ausgefuehrt... und diese ohne!
In Batch Files verhindert @echo off, dass Kommentare (mit : oder REM) angezeigt werden:
@echo off REM Verhindert, dass dieser Kommentar angezeigt wird.
Ohne @echo off:
C:\>REM Dieser Kommentar wird so angezeigt
[Bearbeiten] : (Doppelpunkt)
Sprungmarke für ein Unterprogramm bzw. eine Kommentarzeile.
Sprungmarken werden benötigt, wenn mittels der Batchdatei eine Bedingung überprüft und erfüllt bzw nicht erfüllt wird und entsprechend weiter verfahren werden soll.
Mit dem Batchbefehl goto wird die Sprungmarke angesprungen.
Anmerkung:
Der Doppelpunkt hat auch die Funktion der Manipulation von Variablen wenn er direkt hinter einer Variablen steht. Siehe Kapitel "Variablen" in dieser Publikation.
Syntax
:NAMEDERSPRUNGMARKE
Sprungmarken können eine beliebige Länge haben, von cmd behandelt werden allerdings nur die ersten 8 Zeichen, der Rest wird ignoriert. Kommen in einer Batch also :Sprungmarke1 und :Sprungmarke2 vor, so wird nur die erste beim Aufruf einer der Beiden gefunden.
Beispiel:
Inhalt
if exist C:\blabla.txt goto EDITBLA goto END :: Kommentarzeile, sofern es erforderlich ist, einen Kommentar zu schreiben :: Zur Unterscheidung von Sprungmarken verwende ich zwei "::" :EDITBLA edit blabla.txt :END
Sofern die Datei C:\blabla.txt existiert, wird sie mit edit geöffnet, sonst wird das Unterprogramm übersprungen und die Batchdatei bei der Marke :END fortgesetzt, also beendet.
Seit die Befehlserweiterungen aktiviert sind, steht in Batchdateien die Sprungmarke :EOF zur Verfügung, welche sich unsichtbar am Ende der Batch-Datei befindet.
[Bearbeiten] CALL
Mit call kann man eine andere Batch-Datei aufrufen. Sobald diese beendet wurde, wird die ursprüngliche Batchdatei weiter ausgeführt.
Beispiel:
REM Call.cmd @echo off echo Diese Batchdatei ruft eine andere auf. call anderedatei.bat pause
REM anderedatei.bat @echo off echo Die andere Datei
Die Ausgabe wenn man die Datei Call.cmd startet:
Diese Batchdatei ruft eine andere auf.
Die andere Datei
{Pause}
Wenn die Befehlserweiterungen aktiviert sind (Standard ab Windows 2000) kann man auch Sprungmarken aufrufen (und auch Parameter übergeben):
Beispiel:
@echo off REM Diese Batchdatei ruft eine eigene Sprungmarke auf echo Vor dem Sprung call :sprungmarke echo Nach dem Sprung pause goto end :sprungmarke echo Sprungmarke aufgerufen! goto :eof :end exit
Die Ausgabe:
Vor dem Sprung Sprungmarke aufgerufen! Nach dem Sprung
Beispiel mit Parameter:
@echo off REM Diese Batchdatei ruft eine eigene Sprungmarke auf echo Vor dem Sprung call :sprungmarke meinParameter echo Nach dem Sprung pause goto end :sprungmarke echo Sprungmarke aufgerufen und Parameter %1 uebergeben! goto :eof :end exit
Die Ausgabe:
Vor dem Sprung Sprungmarke aufgerufen und Parameter meinParameter uebergeben! Nach dem Sprung
goto :eof
Dieser Befehl springt automatisch zum Ende der Batchdatei (beendet die aktuelle Prozedur)
[Bearbeiten] CLS
Mit cls (clear screen) wird der Bildschirm gelöscht.
Syntax
cls
Interner Befehl: Ab MS-DOS bis Windows Vista
Beispiel:
Inhalt
@echo off echo Hier schreibe ich jetzt ganz viel Text. echo Hier kann ich z.B. hinschreiben, dass ich jemanden mag. echo. echo Aber den Text sieht man gleich sowieso nicht mehr... Hihi! cls echo War irgendetwas? pause>nul
Ausgabe
War irgendetwas?
[Bearbeiten] CMD
Das Programm, das es möglich macht, DOS-Befehle auf einem NT-System zu benutzen. CMD ist die NT-Entsprechung von COMMAND.
Syntax:
cmd /a|/u|/q|/d|/e (ON|OFF)|/f (ON|OFF)|/v (ON|OFF)|/c befehl|/s|/k|/y
Konsole: Ab Windows NT 4.0 bis Windows NT 6.1 (Windows 7)
Beispiel:
Inhalt
cmd
Ausgabe (unter XP)
C:\>cmd Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\>
Ausgabe (unter Vista)
C:\>cmd Microsoft Windows [Version 6.0.6001] Copyright (c) 2006 Microsoft Corporation. Alle Rechte vorbehalten.
[Bearbeiten] COMMAND
Startet einen neuen Kommandointerpreter. Dieser kann mit exit wieder beendet werden.
Syntax:
command Laufwerk:Pfad Gerät /e /l /u /P /MSG /LOW (/Y (/c|/k) Befehl)
Konsole: Ab MS-DOS bis Windows XP
Beispiel:
Inhalt
command
Ausgabe (unter Windows 95)
C:\WINDOWS>command Microsoft(R) Windows 95 (C)Copyright Microsoft Corp 1981-1996. C:\WINDOWS>
[Bearbeiten] ECHO
Gibt einen Text aus oder schaltet die Befehlszeilen an/aus. Wenn ein Text ausgegeben wird, können dort auch Variablen angezeigt werden, wie z. B. die Variable %ver% (in Windows XP %os%).
Syntax:
echo text|ON|OFF oder alternativ echo.[text]
Interner Befehl: Ab MS-DOS bis Windows NT 5.1 (XP)
Beispiel:
Inhalt
@echo off echo Die aktuelle Datei heißt %0%. echo Die aktuelle Version Ihrer Befehls-Konsole oder -OS heißt %ver%
Ausgabe
Die aktuelle Datei heißt beispiel.bat. Die aktuelle Version Ihrer Befehls-Konsole oder -OS heißt Windows NT
Mit echo. können Sie zudem leere Zeilen ausgeben. Beispiel:
Inhalt
@echo off echo Jetzt gibt es 3 Leere Zeilen zu sehen! echo. echo. echo. echo So! Da waren sie.
Ausgabe
Jetzt gibt es 3 Leere Zeilen zu sehen! So! Da waren sie.
[Bearbeiten] Benutzereingaben mit ECHO
Mit Hilfe des echo-Befehls können Sie auch in einem Skript Benutzereingaben simulieren, indem Sie den Pipe-Operator | verwenden.
Beispiel: Uhrzeit anzeigen ohne Nachfrage
Das normale Verhalten des time-Befehls ist, die aktuelle Zeit der verwendeten Systemuhr anzuzeigen und in der nächsten Zeile die Eingabe einer neuen Uhrzeit zu erwarten. Drückt man auf Enter, bleibt die Systemzeit unverändert. Will man die Zeit nur anzeigen lassen (z. B. in einer Batchdatei vor und nach einer Befehlsfolge, um zu messen, wie lange der PC dafür braucht), lässt sich die Betätigung der Enter-Taste durch einen entsprechenden echo-Befehl ersetzen.
echo.|time
Über den Pipe-Mechanismus lässt sich darüber hinaus die Zeile „Geben Sie die neue Uhrzeit ein:“ unterdrücken:
echo.|time|find /v "neue"
Dabei ist die Groß-/Kleinschreibung von "neue" zu beachten oder der Schalter /I zu verwenden, denn find ist case-sensitiv! Diese Beispiele dienen allerdings nur zur Demonstration, denn die Zeitausgabe wäre auch ohne Pipes (aber erst ab Windows 2000) möglich mit:
time /t
oder einfach:
echo %time%
Sehr nützlich ist das echo-Piping auch zur Übergabe von Benutzereingaben, welche von einzelnen Befehlen abgefragt werden.
Beispiel: Überprüfung einer Festplatte
chkdsk c: /f /r
kann (da es sich beim Laufwerk C um das Systemlaufwerk handelt) erst nach einem Systemstart ausgeführt werden. Normalerweise müsste der Benutzer deswegen den Systemstart durch Eingabe von "Y" bestätigen. Diese Aktion kann man in einem Batch so abbilden:
echo y | chkdsk c: /f /r
.
[Bearbeiten] FOR
Ermöglicht die Schleifenbearbeitung.
Syntax:
for Variable in Satz do Befehl [Parameter]
Interner Befehl: Ab MS-DOS bis Windows NT 6.1 (Windows 7)
Beispiel:
Zeigt alle Dateien im Verzeichnis %temp% an. Es werden nur Dateien, keine Verzeichnisse angezeigt. Um Verzeichnisse anzuzeigen siehe Liste der FOR-Optionen unten. Der Parameter /R bewirkt, dass alle Unterverzeichnisse mit einbezogen werden (Rekursive Schleife).
ACHTUNG:
Die Variable darf nur aus einem Buchstaben bestehen! "%t" ist erlaubt, "%test" nicht! Bei der Verwendung mehrerer Befehle muss zwischen "DO" und der Klammer "(" ein Leerzeichen sein.
Falsch
for Variable in Satz do(
RICHTIG
for Variable in Satz do ( Befehl1 Befehl2 )
Inhalt
@echo off
for /R %temp% %%f in (*.*) do (
echo %%f
)
REM Den Befehl könnte man auch einzeilig schreiben.
pause
Ausgabe
(Alle Temp-Dateien) Bitte beliebige Taste drücken...
Zählschleifen
Mit solchen Schleifen kann man Aktionen eine bestimmte Anzahl oft ausführen. Dazu muss man den Parameter /L angeben.
Syntax: for /L {Variable} IN (Startzahl, Schrittweite, Endzahl) DO (Aktion)
REM Schreibe Text 5 Mal for /L %%N IN (1, 1, 5) DO echo Nummer %%N
Ausgabe:
C:\>for /L %N IN (1, 1, 5) DO echo Nummer %N C:\>echo Nummer 1 Nummer 1 C:\>echo Nummer 2 Nummer 2 C:\>echo Nummer 3 Nummer 3 C:\>echo Nummer 4 Nummer 4 C:\>echo Nummer 5 Nummer 5
verschachtelte Zählschleife:
for /L %%N IN (1, 1, 5) DO ( for /L %%N IN (1, 1, %%N)DO echo Nummer %%N )
Ausgabe:
C:\>for /L %N IN (1 1 5) DO (for /L %N IN (1 1 %N) DO echo Nummer %N ) C:\>(for /L %N IN (1 1 1) DO echo Nummer %N ) C:\>echo Nummer 1 Nummer 1 C:\>(for /L %N IN (1 1 2) DO echo Nummer %N ) C:\>echo Nummer 1 Nummer 1 C:\>echo Nummer 2 Nummer 2 C:\>(for /L %N IN (1 1 3) DO echo Nummer %N ) C:\>echo Nummer 1 Nummer 1 C:\>echo Nummer 2 Nummer 2 C:\>echo Nummer 3 Nummer 3 C:\>(for /L %N IN (1 1 4) DO echo Nummer %N ) C:\>echo Nummer 1 Nummer 1 C:\>echo Nummer 2 Nummer 2 C:\>echo Nummer 3 Nummer 3 C:\>echo Nummer 4 Nummer 4 C:\>(for /L %N IN (1 1 5) DO echo Nummer %N ) C:\>echo Nummer 1 Nummer 1 C:\>echo Nummer 2 Nummer 2 C:\>echo Nummer 3 Nummer 3 C:\>echo Nummer 4 Nummer 4 C:\>echo Nummer 5 Nummer 5
Weitere Möglichkeiten der FOR-Schleife:
syntax-FOR-Files
FOR %%parameter IN (set) DO command
syntax-FOR-Files-Rooted at Path
FOR /R [[drive:]path] %%parameter IN (set) DO command
syntax-FOR-Folders
FOR /D %%parameter IN (folder_set) DO command
syntax-FOR-List of numbers
FOR /L %%parameter IN (start,step,end) DO command
syntax-FOR-File contents
FOR /F ["options"] %%parameter IN (filenameset) DO command
FOR /F ["options"] %%parameter IN ("Text string to process") DO command
syntax-FOR-Command Results
FOR /F ["options"] %%parameter IN (`command to process`) DO command
Zählvariablen in Zeichenketten einbetten
Um die Zählvariable %%f (%f auf der Kommandozeile) in einer Zeichenfolge zu verwenden, wird einfach die Variable in dem String eingebettet
FOR %%f IN (A B C D E) DO (
echo mitten%%fdrinnen
)
[Bearbeiten] GOTO
Mit dem Batchbefehl goto wird eine Sprungmarke : (s.o.) angesprungen.
Syntax
goto NAMEDERSPRUNGMARKE
Beispiel
Siehe unter : (Doppelpunkt).
[Bearbeiten] IF
Der IF Befehl ermöglicht eine einfache Verzweigung und wird oft zusammen mit dem GOTO Befehl eingesetzt. IF ermöglicht hierbei sowohl die Prüfung auf eine Gleichheit als auch auf das Vorhandensein von Dateien.
Beispiel 1:
IF exist c:\temp\my.log echo.>c:\temp\my.log echo.Log Datei erstellt>>c:\temp\my.log
Beispiel 1 prüft ob eine Logdatei vorhanden ist und erstellt ggf. eine Neue.
Beispiel 2:
IF "%COMPUTERNAME%" == "Bastie" GOTO :WAHR REM hier landet man wenn der if-Ausdruck falsch ist GOTO WEITER :WAHR REM hier landet man wenn der if-Ausdruck wahr ist echo Willkommen Zuhause REM Jetzt wird der if Zweig verlassen GOTO WEITER :WEITER echo.Have a nice Day!
Beispiel 3:
IF "%COMPUTERNAME%" == "Bastie" (
echo Willkommen zu Hause!
) ELSE (
echo Du bist auf Computer: %COMPUTERNAME%
)
echo. Schönen Tag noch!
Beachten Sie, bei der Prüfung von Umgebungsvariablen niemals
IF %Umgebungsvariable% == Prüfwert ...
zu schreiben, wenn die Umgebungsvariable nicht gesetzt ist; Sie erhalten sonst einen Syntaxfehler. Der Parameter /i unterbindet eine Differenzierung der Groß-/Kleinbuchstaben.
ACHTUNG:
Bei der Verwendung mehrerer Befehle muss zwischen Bedingung und der Klammer "(" ein Leerzeichen sein.
Falsch
IF Bedingung(
Richtig
IF Bedingung ( Befehl1 Befehl2 )
[Bearbeiten] Syntax Vergleiche
IF <NOT> Variable1==Variable2
NOTDer Befehl wird nur ausgeführt, wenn die Bedingung NICHT Wahr ist. Optional.==ist gleichEQUist gleichNEQnicht gleichLSSkleiner alsLEQkleiner als oder gleichGTRgrößer alsGEQgrößer als oder gleich
[Bearbeiten] PAUSE
Unterbricht die Eingabeaufforderung und wartet auf einen Tastendruck.
Syntax
pause
Interner Befehl: Ab MS-DOS bis Windows NT 5.1 (XP)
Beispiel 1:
Inhalt
@echo off echo Willkommen zur Batchdatei %0 !!! echo. echo Die Batchdatei wird auf einer neuen Seite fortgeführt. pause cls echo Hier fängt meine Batchdatei an... pause
Ausgabe
Willkommen zur Batchdatei beispiel.bat !!! Die Batchdatei wird auf einer neuen Seite fortgeführt. Bitte beliebige Taste drücken...
(Neue Seite)
Hier fängt meine Batchdatei an... Bitte beliebige Taste drücken...
Beispiel 2:
Inhalt
@echo off echo Diese Zeile wird angezeigt anstelle von "Bitte beliebige Taste drücken..." pause > NUL
Ausgabe
Diese Zeile wird angezeigt anstelle von "Bitte beliebige Taste drücken..."
[Bearbeiten] REM
REM leitet einen Kommentar ein. Die Zeile wird ignoriert, beachten Sie jedoch, dass REM von einem Leerzeichen / Tabulator gefolgt werden muss. Alternativ dazu werden häufig auch Sprungmarken eingesetzt, da hier nur ein statt vier Zeichen verwendet werden muss. Häufig wird jedoch die Sprungmarke zur besseren Übersicht doppelt hintereinander geschreiben ::
Beispiel:
REM kill iexplore.exe :kill iexplore.exe ::kill iexplore.exe
[Bearbeiten] START
Startet ein Programm.
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.
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
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
[Bearbeiten] Variablen
Es gibt zweierlei Arten von Variablen: Scriptvariablen und Systemvariablen. Die Scriptvariablen werden innerhalb von Schleifen eingesetzt, beginnen mit % und einem frei wählbaren Zeichen, oder einer Zeichenfolge. Systemvariablen müssen von % begonnen und von % abgeschlossen werden. Sie sind fest definiert. Die Variable %0% hat stets den Namen der aktuellen Datei. Die Variable %ver% hat immer den Namen der aktuellen Betriebssystemversion. Unter Windows XP muss %os% statt %ver% verwendet werden.
Gibt man unter Windows Vista den Befehl echo %os% ein, so gibt der Computer die Version des Systems aus, auf dem das System basiert. Unter Windows Vista gibt es einen Befehl namen ver, mit dem man die Version direkt angezeigt bekommt. Es gibt zwar keine direkte Variable bei Vista, die das Betriebsystem definiert, jedoch kann man das mit folgendem Trick umgehen:
@echo off ' Autobefehlsanzeige ausgeschaltet ver > TMP.dat ' speichert die Ausgabe des Befehls in der Datei TMP.dat Set ver= < TMP.dat ' definiert die Variable des Betriebssystems. (NUR TEMPORÄR !) echo %ver% ' gibt nun die defninierte Variable aus. pause>nul ' pause
Nützliche Stringoperation für Variablen:
Teilstring
Syntax
var:~n,m
Ergibt den Teilstring von var, beginnend mit dem n-ten Zeichen ( von links) und einer Länge von m Zeichen. Gezählt wird ab 0, d.h. das erste Zeichen hat die Position 0 und nicht 1. Werden negative Werte verwendet, so wird vom Ende des Strings /von rechts nach links) gezählt.
Beispiel:
Inhalt:
set str=myfile.bat set name=%str:~0,6% echo %name%
In diesem Beispiel wird der Teilstring von str vom ersten Zeichen an mit einer Länge von 6 Zeichen ausgegeben.
Ausgabe:
myfile
Stringsubstitution
Syntax
var:str1=str2
Mithilfe des Syntax var:str1=str2 kann die Zeichenkette str1 des Inhalts der Variable var durch str2 ersetzt werden.
Beispiel:
Inhalt:
set str="mycommand /p /m file" echo %str% set str=%str:/p /m=/t % echo %str%
In diesem Beispiel werden die Optionen /p /m des Befehls mycommand durch die Option /t ersetzt.
Ausgabe:
"mycommand /p /m file" "mycommand /t file"
[Bearbeiten] COLOR
Mit dem Befehl COLOR kann man die Vorder- und Hintergrundfarbe verändern. Die COLOR Werte bestehen aus zwei HEX-Werten.
0 = Black
1 = Blue
2 = Green
3 = Aqua
4 = Red
5 = Purple
6 = Yellow
7 = White
8 = Gray
9 = Light Blue
A = Light Green
B = Light Aqua
C = Light Red
D = Light Purple
E = Light Yellow
F = Bright White
Der Befehl
COLOR 2F
ergibt zB einen grünen Hintergrund mit weißer Schrift.
[Bearbeiten] TASKKILL
Beendet Prozesse direkt über den Taskmanager. (Nur unter Windows XP Professional)
Syntax
taskkill /IM prozessname.dateiendung
Beispiel:
Inhalt:
@echo off echo Der Internetexplorer wird gestartet und in 5 Sekunden geschlossen start iexplore http://de.wikibooks.org @ping localhost -n 5 >NUL taskkill /IM iexplore.exe pause
In diesem Beispiel wird die Anwendung Internetexplorer gestartet und 5 Sekunden nach dem Start wieder geschlossen. Das Kommanozeilenfenster bleibt offen, bis der Benutzer eine beliebige Taste drückt.