2014-03-04 24 views
2

我正在嘗試編寫一個批處理來檢查正在運行的進程「example.exe」的實例數量,如果有兩個或多個實例,請保持運行。但是,如果只有一個實例正在運行,請結束該過程。這是我有什麼:批處理文件 - 如果只有一個實例正在運行,如何終止進程?

@echo off 
wmic process where name="example.exe" | find "example" /c > %temp%\variable.txt 
set /p value=<%temp%\variable.txt 
if %value% lss 2 goto endprocess 
if %value% gtr 1 goto continue 
:endprocess 
start taskkill /f /im example.exe 
:continue 
ECHO continue 
@echo off 

我的問題是這樣的:它總是認爲值是lss 2(它認爲有少於2個進程運行的實例)。但是,在我的任務管理器中,我可以看到顯然有兩個實例正在運行。我認爲這可能是一個定義價值的問題?我不知道,我對此很新。任何幫助?謝謝!

UPDATE

好吧,我現在已經改成了這個(由脫線建議)

@echo off 
wmic process where name="example.exe" | find "example" /c > "%temp%\variable.txt" 
set /p value=<"%temp%\variable.txt" 
if %value% equ 1 goto endprocess 
if %value% neq 1 goto continue 
:endprocess 
start taskkill /f /im example.exe 
:continue 
ECHO continue 
@echo off 

這仍然沒有確切地工作,但我改變了實例的個數從1到0,它結束了這個過程。換句話說,1個進程正在運行,但是這個批處理文件認爲0正在運行。現在有什麼想法?

+0

我認爲代碼不會進入if語句內部並繼續正常流程。所以每次它殺死進程。只是爲了澄清,在unix中是否有任何命令名爲lss或gtr。因爲我對unix太陌生了。但是我只看到了-lt和-gt命令。所以只是爲了確認。 – user3256147

回答

1

這將使用任務列表中的XP專業版及更高版本:

@echo off 
tasklist /fi "imagename eq example.exe" /nh |find /i /c "example.exe" > "%temp%\variable.txt" 
set /p value=<"%temp%\variable.txt" 
if %value% equ 1 taskkill /f /im example.exe 
ECHO continue 
@echo off 

你可以用一條線,沒有臨時文件也做到這一點 - 這使用另一個FINDSTR過濾器來檢查,如果數字是線路上的單1然後&&是一個條件運算符,如果它發現1,它將啓動taskkill。

@echo off 
tasklist /fi "imagename eq example.exe" /nh |find /i /c "example.exe"|findstr "^1$" >nul && taskkill /f /im example.exe 
ECHO continue 
@echo off 
+0

我正在運行Windows 7.所以你說我應該使用這種類型的代碼? – wafflewrestler

+0

Windows 7比XP Pro更高,這也會起作用。 – foxidrive

+0

好吧我會試試這個......編輯:嗯......我仍然有上面提到的問題,它認爲有0個進程運行的實例。當我從1更改爲0時,過程停止。但在1時,它只是回到ECHO繼續 – wafflewrestler

1

我建議你的邏輯有問題。

的代碼應該去endprocess如果發現數爲< 2 - 即0或1。如果lss 2測試失敗,則計數必須3+,所以gtr 1測試總會成功。

我不知道你爲什麼不乾脆用

if %value% neq 1 goto continue 

甚至

if %value% equ 1 start taskkill /f /im example.exe 

,不過也許你還沒有告訴我們,要能夠檢測其他實例-counts - 以及隱藏您正在檢查的可執行文件的名稱。

現在 - 向我們展示文件的內容可能非常有用。你確定該文件實際上是在生成嗎?如果您嘗試使用"%temp%\variable.txt"而不是%temp%\variable.txt - 即"quote the filename",會發生什麼情況?

相關問題