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!

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?

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu Mehr Details