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-Key: 273002

Url: https://administrator.de/contentid/273002

Printed on: April 19, 2024 at 08:04 o'clock

Member: Clijsters
Clijsters May 27, 2015 at 07:08:14 (UTC)
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
Member: Linuxa
Linuxa May 27, 2015, updated at Jun 14, 2015 at 13:09:55 (UTC)
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.
Member: Clijsters
Clijsters May 27, 2015 at 07:44:26 (UTC)
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
Member: Linuxa
Linuxa May 27, 2015 at 08:34:49 (UTC)
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.
Member: Penny.Cilin
Penny.Cilin May 27, 2015 at 10:08:58 (UTC)
Goto Top
hallo Toormser,

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


Gruss Penny.
Member: Linuxa
Linuxa May 27, 2015, updated at Jun 14, 2015 at 13:10:11 (UTC)
Goto Top
Zitat von @Penny.Cilin:

hallo Toormser,

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


Gruss Penny.
Member: Endoro
Endoro May 27, 2015 at 12:44:10 (UTC)
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
Member: Linuxa
Linuxa May 29, 2015 at 05:45:55 (UTC)
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.