2016-05-26 151 views
0

我需要創建一個windows批處理文件(* .bat)文件,該文件只在某些進程(和批處理文件)沒有運行時才運行它的命令。等待一個.bat文件在一個windows批處理文件中關閉

我已經看過,對於此過程工程文件(* .exe)的解決方案: How to wait for a process to terminate to execute another process in batch file

我想要做一些非常相似,然而,有一個難點:批處理文件顯示爲「CMD。 「TASKLIST」命令中的「exe」。

我想檢查一個特定的bat文件是否正在運行,例如:「C:\ mybatch.bat」,如果是,請等到它關閉。

+0

'tasklist/v'給出窗口標題。就好像它是窗口標題 - cmd不會改變實際標題。 –

回答

0

檢查一個特定的bat文件mybatch.bat是否正在運行可能是比它看起來更加棘手的任務。

尋找在tasklist /V特定的窗口標題,以及在wmic process where "name='cmd.exe'" get CommandLine測試CommandLine財產可能會失敗下的一些想象的情況。

1st。你能

  • mybatch.bat
  • 刪除所有其他title命令開始從mybatch.bat
  • 添加title ThisIsDistinguishingString命令確保mybatch.bat不包含調用另一個批處理腳本(S)一個title命令?

然後檢查errorlevelfind command返回如下:

:testMybatch 
tasklist /V /FI "imagename eq cmd.exe" | find "ThisIsDistinguishingString" > nul 
if errorlevel 1 (
    rem echo mybatch.bat batch not found 
) else (
    echo mybatch.bat is running %date% %time% 
    timeout /T 10 /NOBREAK >NUL 2>&1 
    goto :testMybatch 
) 

第二。否則,檢查是否wmic Windows Management Instrumentation command輸出可以幫助

wmic process where "name='cmd.exe'" get /value 

然後,你可以在它的輸出縮小到

檢測 mybatch.bat
wmic process where "name='cmd.exe'" get CommandLine, ProcessID 

注意wmic可如果一個特定的返回一些Win32_Process class性能,尤其是CommandLine進程在另一個用戶帳戶下啓動或提升(以管理員身份運行)。
高架wmic返回全部屬性。

+0

謝謝。您的解決方案適合我的需求。 – zaidgs

0

你說什麼默認情況下發生。

要進行測試,箱子一個新的.bat文件(假設1.BAT),並把它

MSPAINT

保存並運行它。 計算器將開始。你會注意到Paitbrush只有在關閉計算器後纔會啓動。

+0

您誤解了我的問題。我需要檢查批處理文件是否運行在我需要寫入的批處理文件之外/之前運行。 – zaidgs

相關問題