18

私は4つのバッチファイルを持っています。私は走りたいと思っていone.batますtwo.bat。これら 2 つのバッチ ファイルの完了後、一度に、並行して実行する必要がthree.batあります。four.bat私は多くの方法で試しましたが、mot は正常に動作します。

誰でもこれについて私を助けることができますか?

4

4 に答える 4

18

これは、シェル プロセスの並列実行用に提供したソリューションの大幅に簡略化されたバージョンを使用して簡単に実行できます。ファイルのロックがどのように機能するかについては、その解決策を参照してください。

@echo off
setlocal
set "lock=%temp%\wait%random%.lock"

:: Launch one and two asynchronously, with stream 9 redirected to a lock file.
:: The lock file will remain locked until the script ends.
start "" cmd /c 9>"%lock%1" one.bat
start "" cmd /c 9>"%lock%2" two.bat

:Wait for both scripts to finish (wait until lock files are no longer locked)
1>nul 2>nul ping /n 2 ::1
for %%N in (1 2) do (
  ( rem
  ) 9>"%lock%%%N" || goto :Wait
) 2>nul

::delete the lock files
del "%lock%*"

:: Launch three and four asynchronously
start "" cmd /c three.bat
start "" cmd /c four.bat
于 2012-09-30T22:00:37.160 に答える
6

私はこれと同じジレンマを抱えていました。これが私がこの問題を解決した方法です。Tasklist コマンドを使用して、プロセスがまだ実行されているかどうかを監視しました。

:Loop
tasklist /fi "IMAGENAME eq <AAA>" /fi "Windowtitle eq <BBB>"|findstr /i /C:"<CCC>" >nul && (
timeout /t 3
GOTO :Loop
)
echo one.bat has stopped
pause

微調整する必要があります

<AAA>, <BBB>, <CCC>

スクリプトの値を変更して、プロセスを正しくフィルタリングできるようにします。

それが役立つことを願っています。

于 2012-10-25T17:53:06.057 に答える
3

one.bat と two.bat を開始する master.bat ファイルを作成します。one.bat と two.bat が正しく終了すると、終了したファイルにエコーされます

if errorlevel 0 echo ok>c:\temp\OKONE
if errorlevel 0 echo ok>c:\temp\OKTWO

次に、master.bat は 2 つのファイルが存在するのを待ちます

del c:\temp\OKONE
del c:\temp\OKTWO
start one.bat
start two.bat
:waitloop
if not exist c:\temp\OKONE (
    sleep 5
    goto waitloop
    )
if not exist c:\temp\OKTWO (
    sleep 5
    goto waitloop
    )
start three.bat
start four.bat

別の方法は、/WAIT フラグを試すことです。

start /WAIT one.bat
start /WAIT two.bat

ただし、エラーを制御することはできません。

ここにいくつかの参照があります

http://malektips.com/xp_dos_0002.html

http://ss64.com/nt/sleep.html

http://ss64.com/nt/start.html

于 2012-09-25T12:19:30.933 に答える