Batch-Programmierung: Batch-Befehle

Aus Wikibooks

Wechseln zu: Navigation, Suche

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

NOT Der Befehl wird nur ausgeführt, wenn die Bedingung NICHT Wahr ist. Optional.
==  ist gleich
EQU ist gleich
NEQ nicht gleich
LSS kleiner als
LEQ kleiner als oder gleich
GTR größer als
GEQ größ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.


Persönliche Werkzeuge