Ablauf Schleifen und Sprungmarken batch datei: loop goto
Sprungmarken:
Beispiel:
@echo off
goto springe
echo hallo
:springe
echo gesprungen
pause
Ausgabe: gesprungen (echo hallo wird ignoriert, da mit dem Befehl "goto springe" die Zeile "echo hallo" ĂŒbersprungen wird)
TEST: existiert eine Datei?
if exist %datei.txt
Beispiel:
@echo off
if exist %datei.txt goto existiert
echo Datei nicht gefunden!
goto ENDE
:existiert
echo die Datei existiert!
:ENDE
pause
Ausgabe: wenn die Datei datei.txt existiert: "die Datei existiert!" wenn die Datei datei.txt nicht existiert: "Datei nicht gefunden!"
Errorlevel:
jeder Befehl gibt bestimmte errorlevel zurĂŒck:
meist bedeutet der errorlevel 1, dass der Befehl nicht erfolgreich war:
Beispiel:
@echo off
xcopy c:\so c:\so2
if errorlevel 1 goto error
goto ende
:error
echo das kopieren war nicht erfolgreich!
:ende
pause
in diesem Beispiel wird das Verzeichnis c:\so in c:\so2 kopiert,
wenn jetzt z.B. so nicht existiert, schreibt die Batch-Datei: "das kopieren war nicht erfolgreich!"
for Schleife
For %%f In (c:\batch\*.bat c:\bat\*.bat) Do Copy %%f
ErklÀrung: diese Zeile kopiert alle Dateien im Ordner c:\batch mit Dateiendung .bat nach c:\bat
Â
der ZĂ€hler kann auch so aussehen:
for /l %i in (1,1,100) do echo %i
bedeutet: beginnend von 1 in 1er Schritte bis 100; ausgefĂŒhrt wird echo %i (%i ist die fortlaufende Nummer)
Â
siehe auch:Â cmd Befehl mehrfach
if
if "alle"=="%1" del *.tmp
ErklÀrung: %1 ist eine, beim Aufruf auf an die Batch-Datei, angehÀngte Variable:
z.B. batchdatei.cmd Variable. Wenn also in diesem Beispiel an die Batchdatei "alle" angehÀngt wird: batchdatei.cmd alle, dann werden alle Dateien mit Endung .tmp aus dem aktuellen Verzeichnis gelöscht.
möglich wÀre auch eine Abfrage mit if not 1==2 ... (also wenn 1 nicht 2 ist, stimmt in diesem Fall)
warte auf Task
:LOOP
echo in der Schleife
@ping -n 10 localhost> nul
TaskList|Find "Taskname" >NUL || If Errorlevel 1 Goto WEITER
Goto LOOP
:WEITER
ErklÀrung:
mit "@ping -n 10 localhost> nul" wird in der Schleife 10 Sekunden gewartet,
die Befehlszeile "TaskList|Find "Taskname" >NUL || If Errorlevel 1 Goto WEITER" verlĂ€sst die Schleife erst, wenn der Task: "Taskname" nich mehr lĂ€uft  Â
weiterfĂŒhrende Themen
- EinfĂŒhrung, Grundlagen und erweitertes Wissen zu Windows Batch, siehe:Â Windows Batch.Â
- Der aktuelle Kommandozeileninterpreter, siehe:Â Windows PowerShell

{{percentage}} % positiv

DANKE fĂŒr deine Bewertung!
Top-Artikel in diesem Bereich
Die Funktion wait oder sleep war in BATch Dateien standardmĂ€Ăig nicht vorhanden.Abhilfe schafft ein kleiner Umweg ĂŒber den ping Command
Wer eine Batch-Datei angelegt hat, kann in jede Zeile einen Befehl schreiben, siehe: wie erstelle ich eine Batch Datei - Grundlagen. Die Befehle werden beim Starten der Datei der Reihe nach ausgefĂŒhrt. Das Verhalten der Ausgabe kann wie folgt angepasst werden.
CMD Befehl Windows Verwaltung: Systemsteuerung CPL und MSC
Fragen / Kommentare
(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]
User: Anonym ich möchte ĂŒberprĂŒfen, ob in den letzten 24 eine neue "XY.zip" Datei im Ordner X abgelegt wurde, wenn ja entpacke nach XY im selben Ordner. ( Im Ordner X liegen bereits weitere .zip-Dateien, die bereits entpackt wurden. Ist exist der richtige Ansatz hierfĂŒr? wie muss der Befehl aussehen? ich komme nicht mehr weiter. Danke fĂŒr jede Hilfe :)
User: Delphis1982 Hier mal eine Batch, die beim Starten von Windows VOR der Anmeldung solange wartet, bis ERSTENS: die Netzwerkfreigabe erreichbar ist und ZWEITENS: bis das iSCSI-Laufwerk D: eingebunden ist (da darin der Desktop liegt). Erst wenn BEIDE Bedingungen erfĂŒllt sind, erfolgt die Anmeldung. In der Batch mĂŒssen also eigentlich nur ZWEI Bedingungen erfĂŒllt werden, aber in der Batch sind DREI "if"-Abfragen. Je nachdem, welche Bedingung in LOOP1 zuerst erfĂŒllt wird, wird der ZĂ€hler "t3" um 1 reduziert, springt springt dann zu LOOP2 oder LOOP3 und wartet dann, bis auch die jeweils andere Bedingung erfĂŒllt wurde, dann wird der ZĂ€hler "t3" nochmal um 1 reduziert. In allen LOOP-Abschnitten wird immer wieder der ZĂ€hler abgefragt. Sobald dieser 0 erreicht hat, heiĂt es dann einfach EXIT und der Desktop wird geladen. :START @echo off set /a t1=20 set /a t2=20 set /a t3=2 :LOOP1 cls echo Noch %t1% Versuche... if exist \\SERVER-PC\ShareFolder goto LOOP2 if exist D:\NUL goto LOOP3 if %t1%==0 goto EXIT timeout /t 2 set /a t1=t1-1 goto LOOP1 :LOOP2 cls echo Noch %t2% Versuche... if exist D:\NUL goto EXIT if %t2%==0 goto EXIT timeout /t 2 set /a t2=t2-1 goto LOOP2 :LOOP3 cls echo Noch %t3% Versuche... if exist \\SERVER\ShareFolder goto EXIT if %t3%==0 goto EXIT timeout /t 2 set /a t3=t3-1 goto LOOP3 :EXIT set t1= set t2= set t3= exit
User: Lexor Warum fĂŒr das Warten nicht @timeout nutzen?
gute Frage. Der Grund ist, dass timeout nicht immer Teil des OS war und du hast Recht mit Windows 10 ist timeout schöner.
Beitrag erstellt von Bernhard
User: AAxx19 Besteht die Möglichkeit mit einem Scriptbefehl den Download auf max. 5 zu begrenzen? :download ping /n 9 localhost >nul echo/ if %myprogrammist2% EQU 998 goto nomyprogramm echo **************************************** echo * * if %myprogrammist2% GTR 999 ( echo * myprogramm Update from %myprogrammist2% * ) else ( echo * myprogramm Update from %myprogrammist2% * ) set /a cat=%myprogrammist2% :loopb set /a cat=%cat%+1 wget --spider -o download http://myhomepage/update/myprogramm/%versiondir%/ETW2%cat%%version%.exe findstr /m "Length:" download if %errorlevel%==1 ( echo * myprogramm complete * echo * * echo **************************************** goto ETW3 ) else ( if exist %drv%\SYLT\ETW2\Update\ETW2%cat%%version%.exe ( goto loopb ) else ( wget.exe -q -c http://myhomepage/update/myprogramm/%versiondir%/ETW2%cat%%version%.exe -P %drv%\SYLT\ETW2\Update ) ) if %cat% lss 1100 goto loopb
User: Bashi Hi! Ich versuche eine .bat zu schreiben die solange versucht sich mit einem bestimmten Wlan Profil zu verbinden, bis die Verbindung hergestellt wurde, wie wĂŒrde die if bedingung da aussehen?
User: Daniel if exist %datei.txt goto existiert Was sagt das Prozentzeichen aus ?
User: m Anstatt :ENDE am schluss zu schreiben und dorthin zu springen, kann mann auch 'exit' oder 'goto :eof' (Bedeuted warscheinlich 'end of file') schreiben um das program zu beenden.
User: paxi und fixi Ping -n 11 localhost braucht man doch fĂŒr ne 10 sekunden pause muss ja immer ne sekunde dazugezĂ€hlt werden oda nich ???