2012-10-26 306 views
3

我在平行經由命令行(WIN7 CMD)執行4項任務:CMD - 等待並行命令行完成?

start defrag /A c: 
start defrag /A d: 
start defrag /A e: 
start defrag /A f: 
dir 

然而dir命令的第一行之後執行。

我希望dir命令在所有4完成後執行。

我該怎麼辦?

回答

5

試試這個:

start defrag /A c: 
start defrag /A d: 
start defrag /A e: 
start defrag /A f: 

:StartLoop 
:: Check whether any of the defrags are running... 
tasklist|Findstr /i /c:"defrag" 
:: Exiting the loop if tasklist didn't find any defrags. 
If %errorlevel% NEQ 0 (
    GoTo :ExitLoop 
) 
choice /T 10 /D Y /M "Waiting for 10 seconds..." 
GoTo :StartLoop 
:ExitLoop 
dir 
+0

感謝如何將'%ERRORLEVEL%'會得到它的價值? (它是在選擇之前...) –

+0

_FINDSTR將%ERRORLEVEL%設置爲0(False),如果在至少一個文件的至少一行中發現匹配。附:爲了在睡眠後喚醒我的硬盤驅動器並使它們旋轉,我正在做。碎片整理/ A將運行最小的測試,所以它很好。 (dir/s剛剛從fat/ntfs讀取 - 所以這個命令真的讓它們旋轉) –

+0

isnt'::'就像'rem'? –

1

這將導致defrag /A [drive]爲C,d,e和f運行,等待每個開始下一個之前完成。最後,它將退出並運行dir

for %%i in (c d e f) do start "" /B /WAIT defrag /A %%i: 

dir 
1

可以使用defrag /M選項在多個驅動器啓動磁盤碎片整理,然後用defrag /T選項等待每個來完成。 defrag /T等待只有一個捲來完成,但因爲要等待所有的人,這會爲你工作:

REM This will start defrag running concurrently on all four drives: 
defrag c: d: e: f: /M 

REM Wait for each drive to complete. But since you want to wait of them, that is okay. 
REM The order is unimportant 
defrag c: /T 
defrag d: /T 
defrag e: /T 
defrag f: /T 

REM They are all done. You are set to whatever you want to do next. 
dir