2013-01-12 22 views
0

方案1: CALC.EXE運行爲什麼這兩種情況下的錯誤級別有差異?

taskkill /IM calc.exe /f | if "%ERRORLEVEL%"=="0" taskkill /IM calc.exe /f 

這臺1作爲錯誤級別。

方案2:CALC.EXE未運行

taskkill /IM calc.exe /f 

這臺128作爲錯誤級別。

有人可以請解釋我爲什麼會發生這種情況,並且如果在第一種情況下有類似於第二種情況的方式將errorlevel設置爲128,

回答

0

我用taskkilltasklistfind進行了實驗。所有返回不一致的錯誤級別。這使得不可能可靠地使用errorlevel來知道進程是否正在運行或者它是否真正被終止。但是,我沒有找到一個方法來做到這一點,而無需使用ERRORLEVEL:

@echo off 

setlocal ENABLEDELAYEDEXPANSION 

set _i=0 
for /f "delims=" %%i in ('tasklist ^| find /i "%1"') do set /a _i+=1 

if !_i! GTR 0 (

    echo Found !_i! instances of %1. Terminating all instances... 
    taskkill /im "%1" /f > nul 2>&1 

    echo Verifying that %1 has been terminated... 
    set _i=0 
    for /f "delims=" %%i in ('tasklist ^| find /i "%1"') do set /a _i+=1 

    if !_i! EQU 0 (
    echo %1 was successfully terminated. 
) else (
    echo %1 was *not* teriminated. There are still !_i! instances running. 
) 

) else (
    echo %1 is not running. 
) 

set _i= 
endlocal 

您需要啓用延遲擴展,從而使_i變量可以適當地評估。

for ... %%i代碼行集_i等於進程在內存中的實例數。由於find不會返回一致的錯誤級別,因此我們可以使用此技術可靠地查找它在內存中的次數...

相關問題