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.
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%
)
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 273002
Url: https://administrator.de/forum/batch-programmierung-if-abfragen-273002.html
Ausgedruckt am: 22.12.2024 um 23:12 Uhr
8 Kommentare
Neuester Kommentar
Hallo Toormser,
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
) 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
Hey,
wenn du das ordentlich hinschreibst, einrückst usw. dann klappts auch mit den Klammern.
Beispiel:
Es sieht auf dem Board nicht so gut aus, weil das Tabstopps zu weit expandiert.
Gruss, Endoro
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%
)
)
Gruss, Endoro