linuxa
Goto Top

Batch Programmierung IF Abfragen

Hallo zusammen,

ich möchte gerne einige IF-Abfragen in einer Batch programmieren, was allerdings nicht so möchte wie ich. Er überpringt die IF-ELSE Anweisungen einfach und springt zum nächsten GOTO (:function).

Was genau mache ich falsch? Haben wir hier ein Batch-Ass unter uns der mir ein wenig weiterhelfen kann und mir ggf. mitteilen kann, wie es besser geht?

Vielen Dank euch. Beiliegend der Sourcecode des Batchfiles. Es geht darum kopierte Daten im Anschluss via Checksummen überprüfen zu lassen. Wenn ich die Schritte einzelnd ohne IF-ELSE durchgehe funktioniert es ohne Probleme.
@echo off

REM el0=OK, el1=NOT_OK

set SourceDir=D:\source
set TargetDir=D:\target
set VerPrg=G:\NEW\fciv.exe
set XmlDir=D:\check.xml
set PingTarget=127.0.0.1
set FileAge=1
set CutFiles=D:\moved


ping %PingTarget% -n 3
if %ERRORLEVEL% == 0 (
			goto VERI
) else if %ERRORLEVEL% == 1 (
			echo Failure in progress: %errorlevel%
			REM Send a mail to an administrator
			PAUSE
			exit /b %errorlevel%
)

:VERI
call %VerPrg% %SourceDir% -r -bp %SourceDir% -xml %XmlDir%
timeout 2 /nobreak
if %ERRORLEVEL% == 0 (
			goto DCOPY
) else if %ERRORLEVEL% == 1 (
			echo Failure in progress: %errorlevel%
			REM Send a mail to an administrator
			PAUSE
			exit /b %errorlevel%
)

:DCOPY
call robocopy.exe %SourceDir% %TargetDir% /E /MINAGE:%FileAge% /R:1 /W:1
if %ERRORLEVEL% == 0 (
			goto VERIF
) else if %ERRORLEVEL% == 1 (
			echo Failure in progress: %errorlevel%
			REM Send a mail to an administrator
			PAUSE
			exit /b %errorlevel%
)

:VERIF
call %VerPrg% -v -bp %TargetDir% -xml %XmlDir%
if %ERRORLEVEL% == 0 (
			goto CUTF
) else if %ERRORLEVEL% == 1 (
			echo Failure in progress: %errorlevel%
			REM Send a mail to an administrator
			PAUSE
			exit /b %errorlevel%
)

:CUTF
mkdir %CutFiles%
call robocopy.exe %SourceDir% %CutFiles% /E /MOVE /MINAGE:%FileAge% /R:1 /W:1
rmdir %CutFiles% /s /q
if %ERRORLEVEL% == 0 (
			echo ALLOK-LAST
) else if %ERRORLEVEL% == 1 (
			echo Failure in progress: %errorlevel%
			REM Send a mail to an administrator
			PAUSE
			exit /b %errorlevel%
)

Content-ID: 273002

Url: https://administrator.de/forum/batch-programmierung-if-abfragen-273002.html

Ausgedruckt am: 22.12.2024 um 23:12 Uhr

Clijsters
Clijsters 27.05.2015 um 09:08:14 Uhr
Goto Top
Hallo Toormser,

) else if %ERRORLEVEL% == 1 (
Da fehlt (hoffentlich) ein Stück.
Leider sagtest du nicht genau, in welcher Zeile das Verhalten auftritt. ausserdem verwendest du keine Code-Tags.
Ein Problem könnte (geraten) deine Else if verwendung sein. Errorlevels können diverseste Werte haben. Der muss nicht 0 oder 1 sein.

Beste Grüße
Dominique
Linuxa
Linuxa 27.05.2015, aktualisiert am 14.06.2015 um 15:09:55 Uhr
Goto Top
Zitat von @Clijsters:

Hallo Toormser,

> ) else if %ERRORLEVEL% == 1 (
Da fehlt (hoffentlich) ein Stück.
Leider sagtest du nicht genau, in welcher Zeile das Verhalten auftritt. ausserdem verwendest du keine
Code-Tags.
Ein Problem könnte (geraten) deine Else if verwendung sein. Errorlevels können diverseste Werte haben. Der muss nicht 0
oder 1 sein.

Beste Grüße
Dominique

Kannst du mir verraten, was genau fehlt? Danke dir. Code passe ich nachher genauer an. Habe erstmal getaggt.
Clijsters
Clijsters 27.05.2015 um 09:44:26 Uhr
Goto Top
Dein Code beginnt mit einer schließenden Klammer. Was da mal vor war - Keine Ahnung. Auf jeden Fall muss da mal was gewesen sein. Ich würde sagen, die dazugehörige If-Anweisung. Mit Else If kann man schlecht anfangen, wenn es kein vorhergehendes If gab.


LG
Linuxa
Linuxa 27.05.2015 um 10:34:49 Uhr
Goto Top
Zitat von @Clijsters:

Dein Code beginnt mit einer schließenden Klammer. Was da mal vor war - Keine Ahnung. Auf jeden Fall muss da mal was gewesen
sein. Ich würde sagen, die dazugehörige If-Anweisung. Mit Else If kann man schlecht anfangen, wenn es kein
vorhergehendes If gab.


LG

Ich kann mir gerade nicht erklären, weshalb er es beim ersten mal nicht übernommen hat. Nun ist es richtig.
Penny.Cilin
Penny.Cilin 27.05.2015 um 12:08:58 Uhr
Goto Top
hallo Toormser,

das funktioniert so nicht. Schau Dir mal folgendes Beispiel an .


Gruss Penny.
Linuxa
Linuxa 27.05.2015, aktualisiert am 14.06.2015 um 15:10:11 Uhr
Goto Top
Zitat von @Penny.Cilin:

hallo Toormser,

das funktioniert so nicht. Schau Dir mal folgendes
Beispiel an .


Gruss Penny.
Endoro
Endoro 27.05.2015 um 14:44:10 Uhr
Goto Top
Hey,
wenn du das ordentlich hinschreibst, einrückst usw. dann klappts auch mit den Klammern.
Beispiel:
if %ERRORLEVEL% == 0 (
	goto VERI
) else (
	if %ERRORLEVEL% == 1 (
		echo Failure in progress: %errorlevel%
		REM Send a mail to an administrator
		PAUSE
		exit /b %errorlevel%
	)
)
Es sieht auf dem Board nicht so gut aus, weil das Tabstopps zu weit expandiert.
Gruss, Endoro
Linuxa
Linuxa 29.05.2015 um 07:45:55 Uhr
Goto Top
Danke nochmal für das Beispiel. Läuft er auch zu einem "GOTO" (:example), wenn es gar nicht mit einem "goto example" aufgrufen wurde? Weil dann kann ich logischerweise gar nicht mit GOTO arbeiten, weil dann die vorherige if-Abfrage unnütz wäre.