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
positive Bewertung({{pro_count}})
Beitrag bewerten:
{{percentage}} % positiv
negative Bewertung({{con_count}})

DANKE fĂŒr deine Bewertung!

Aktualisiert: 04.10.2016 von Bernhard 🔔


Top-Artikel in diesem Bereich


sleep oder wait in Batch Dateien: pause cmd
Die Funktion wait oder sleep war in BATch Dateien standardmĂ€ĂŸig nicht vorhanden.Abhilfe schafft ein kleiner Umweg ĂŒber den ping Command

Aufbau einer Batch Datei Syntax: echo off cmd
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
CMD Befehl Windows Verwaltung: Systemsteuerung CPL und MSC

Fragen / Kommentare


(sortiert nach Bewertung / Datum) [alle Kommentare(neueste zuerst)]

✍anonym
02.10.2018 11:27
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 :)

✍anonym
18.10.2018 09:27
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

✍anonym
08.09.2018 12:46
User: Lexor 
Warum fĂŒr das Warten nicht @timeout nutzen?
↳
✍Bernhard
gepostet am 08.09.2018 12:46
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

✍anonym
26.05.2018 10:35
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

✍anonym
06.01.2017 10:17
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?

✍anonym
10.08.2015 13:45
User: addto 
wie komme ich aus "Telnet exel" raus?

✍anonym
27.01.2013 17:51
User: Daniel 
if exist %datei.txt goto existiert

Was sagt das Prozentzeichen aus ?

✍anonym
13.06.2012 12:57
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.

✍anonym
08.11.2011 17:30
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 ???

✍anonym
05.07.2011 07:32
User: Nelson 
Danke genau das hatte ich gesucht

✍anonym
15.06.2011 17:34
User: Crash Override 
guter hilfetext

✍anonym
06.06.2011 10:41
User: Marci 
Gibts es auch das auf eine bestimmt taste gewarte wird?