1
ファイル内の各行に対してプログラムを実行する必要があります。私は一度に4つのインスタンスを起動しています。 4つのインスタンスの後、しばらく待って別のインスタンスを起動します。待ち時間の後のバッチスクリプトが壊れています。gotoを使用するときにバッチファイル内のforループを中断する
私が間違っているとお考えください。
括弧(...)
のコードブロックのブロックコンテキストを破壊
goto :Label
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
意図的にブロックを離れたくない場合は、ブロック内に 'goto'やラベルを使用しないでください(ブロックは'( 'と') 'の間にあります)。 – Stephan
ブロック全体を ':waittofinish'から始めることができます(' if "!JobName!" equ "" 'の' else'節のコード全体をサブルーチンに入れて 'call'を使います;そうすれば 'for/F %% J'ループの文脈から' goto'を隠すことになります... – aschipfl
Thanks Aschipfl。出来た。あなたは私を救った...しかし何かが失われていますか?最後の行が2回実行されていますか?私はファイルの最後の行を意味する、プログラムは2回実行されて..これについての任意のアイデア?サブルーチンはプログラムを2回目にトリガしています。どのようにそれを防ぐために? – srinath