2013-05-27 79 views
3

我有一個文件,用於檢查進程是否正在運行。如果是的話,那麼它會循環,如果沒有,它會將一個行回顯到一個txt文件中,我的問題是當進程沒有運行時它仍然繼續循環。這裏是我的代碼批處理ERRORLEVEL問題

:a 
Tasklist /v | findstr CMD.exe | findstr LAN 
If ERRORLEVEL==1 goto :done 
Goto :a 

:done 

Echo %USERNAME% has logged out. >>log.txt 

我覺得我做錯了什麼與ERRORLEVEL althought我受夠了,如果,如果不是0-2 errorlevels語句嘗試過。

回答

4

你不能讓這與像that.Try ERRORLEVEL比較操作:

If ERRORLEVEL 1 goto :done 

if %errorlevel% == 1 goto :done 

if %errorlevel% EQU 1 goto : done 

而當你使用查找或FINDSTR你需要報價:

Tasklist /v | findstr "CMD.exe" | findstr "LAN" 

您還可以使用條件執行:

Tasklist /v | find "CMD.exe" | find "LAN" || goto :done 
2

您的問題可能是的CMD.exe是區分大小寫的測試,它沒有被通過過濾器。/i開關將使兩個findstr測試不區分大小寫。

試試這個:它會跳轉到:一,如果CMD.EXE和局域網都沒有發現。

:a 
Tasklist /v | findstr /i "CMD.exe" | findstr /i "LAN" >nul 
If ERRORLEVEL 1 goto :a 

Echo %USERNAME% has logged out. >>log.txt