Ich muss ein Programm für jede Zeile in einer Datei ausführen. Ich triggeriere vier Instanzen gleichzeitig. Nach vier Instanzen, einige Zeit warten und eine weitere auslösen. Nach der Wartezeit bricht das Batch-Skript ab.Breakout for Schleife in Batch-Datei bei der Verwendung von
Bitte schlagen Sie vor, wenn ich falsch mache.
for /F "tokens=*" %%J in (%JobListFile%) do (
SET JobName=%%J
echo job name !JobName!
if "!JobName!" equ "" (
echo joblist not found... rerun the script..
REM exit /b
) else (
:waittofinish
for /F "tokens=*" %%a in ('tasklist /fi "IMAGENAME eq dsexport.exe" ^| grep -c "dsexport.exe"') do (SET /A CurrInstances=%%a)
echo current instance is !CurrInstances!
echo parallelism set to !NoOfParallelInstances!
if "!CurrInstances!" gtr "!NoOfParallelInstances!" (
echo going to wait
sleep 5
goto waittofinish
echo failed to go wait label...
) else (
echo Exporting job: !JobName! ...............Starting
start /b cmd /C "C:/IBM/9.1/InformationServer/Clients/Classic/dsexport.exe /D=%vDomain% /U=%vuserID% /P=%vpassword% /H=%vServer% %vDSProject% /NODEPENDENTS /JOB=!JobName! %tmppath%\!JobName!.dsx"
echo.
echo.
)
)
)
echo script completed...
exit /b
Verwenden Sie nicht "Goto" oder Beschriftungen in einem Block (ein Block ist alles zwischen '(' und ')'), es sei denn, Sie möchten den Block absichtlich verlassen. – Stephan
Sie können den gesamten Block beginnend bei ': waittofinish' (also den gesamten Code in der' else'-Klausel von 'if"! JobName! "Equ" "') in eine Unterroutine einfügen und 'call' verwenden; auf diese Weise versteckst du das 'goto' aus dem Kontext der 'for/F %% J'-Schleife ... – aschipfl
Danke Aschipfl. Es funktionierte. Du hast mich gerettet ... Aber fehlt irgendetwas? letzte Zeile wird zweimal ausgeführt? Ich meine für die letzte Zeile in der Datei, Programm wird zweimal ausgeführt .. irgendeine Idee zu diesem Thema? Unterprogramm löst das Programm zum zweiten Mal aus. Wie man es verhindert? – srinath