我發現很難在這裏修改腳本,以滿足我的要求: https://stackoverflow.com/a/12665498/4683898等待並行批處理腳本或命令行
@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
我使用批處理腳本,不執行進一步的批處理腳本,但只需執行cmd命令(運行一段時間)並行,並且與上面的腳本一起工作正常。
但是,我希望能夠同時運行多個命令/腳本,即3,4,5(或任何我想要的)命令,並行運行,我們稱之爲x。
所以,我想運行CMD命令的x量(即在平行執行),等待他們終止(使用/ C),然後執行所述下一堆CMD命令的x量,然後下一個束,等等,直到所有cmd命令已經執行。
我該如何修改該腳本? (我已經做了幾次嘗試,儘管重複錯誤「進程無法訪問該文件,因爲它正在被另一個進程使用」,在啓動批處理腳本中;我推測這個文件是指鎖文件)
感謝
編輯:
@echo off
setlocal
set "lock=%temp%\wait%random%.lock"
call :a start cmd.exe /c somecommandA 1
call :a start cmd.exe /c somecommandB 2
call :wait
call :a start cmd.exe /c somecommandC 1
call :a start cmd.exe /c somecommandD 2
call :a start cmd.exe /c somecommandE 3
exit /b
:a
start "%~2" cmd /c 9>"%lock%%2" %1
exit /b
:wait
1>nul 2>nul ping /n 2 ::1
for %%N in (%lock%*) do (
(rem
) 9>"%%N" || goto :Wait
) 2>nul
謝謝。我得到同樣的錯誤「進程無法訪問文件,因爲它正在被另一個進程使用。」在啓動批處理腳本中。此外,不幸的是它不起作用 - 它只是打開命令提示符等待進一步的命令。請參考我上面原始帖子中的編輯,瞭解我目前的內容。任何其他想法? – 151SoBad