2016-10-16 14 views
1

いくつかのプロセスを強制終了するための小さなスクリプトがあります。プロセスが見つからない場合を除いて、エラーメッセージが表示されます。 2 > nulを追加すると、エラーが破棄されるため、問題は解決しません。エラーを確認しますが、表示しないでください

エラーを表示しないようにするにはどうすればよいでしょうか?前のコマンドであった場合に実行=(&&を条件付き実行演算子を使用し

for %%i in (%procs%) do (
    >nul 2>&1 TASKKILL /F /IM "%%~i" 
    if not errorlevel 1 (
     echo %%i was stopped successfully 
    ) else (
     echo %%i was not started 
    ) 
) 

チェックerrorlevelに使用する構文を変更

for %%i in (%procs%) do (
    TASKKILL /F /IM %%i > nul 
    if "%ERRORLEVEL%"=="0" (
     echo %%i was stopped successfully 
     echo. 
    ) else (
     echo %%i was not started 
    ) 
) 

答えて

1

は(エラーレベルがn以上である場合、式if errorlevel n手段)成功、|| =前のコマンドが失敗した場合に実行)

for %%i in (%procs%) do (
    >nul 2>&1 TASKKILL /F /IM "%%~i" && (
     echo %%i was stopped successfully 
    ) || (
     echo %%i was not started 
    ) 
) 
遅れた拡張を使用して

(フルブロックが解析された変数内の値に置き換えerrorlevel読み出し動作と、それなしには、あなたが変更された値を取得することはできません)

setlocal enabledelayedexpansion 
for %%i in (%procs%) do (
    >nul 2>&1 TASKKILL /F /IM "%%~i" 
    if !errorlevel!==0 (
     echo %%i was stopped successfully 
    ) else (
     echo %%i was not started 
    ) 
) 

しかし、このすべてのサンプルがある覚えて簡素化。 Ex。プロセスを終了できない場合は、taskkillも失敗する可能性があります。拡張変数は、実行 時点ではなく、解析時に展開されるようになります遅延

0

読むEnableDelayedExpansion

、このオプションは SETLOCALコマンドでオンになっています。遅延拡張が有効な場合、 は!variable_name!(通常の %variable_name%に加えて)を使用して参照することができます。

Setlocal EnableDelayedExpansion 
for %%i in (%procs%) do (
    TASKKILL /F /IM %%i 1>nul 2>&1 
    if "!ERRORLEVEL!"=="0" (
     echo %%i was stopped successfully 
     echo. 
    ) else (
     echo %%i was not started 
    ) 
) 

又は

for %%i in (%procs%) do (
    TASKKILL /F /IM %%i 1>nul 2>&1 
    if ERRORLEVEL 1 (
     echo %%i was not started 
    ) else (
     echo %%i was stopped successfully 
     echo. 
    ) 
) 

TASKKILLコマンドは、例えば、プロセスがrunninqされていないことのためだけでなく、より多くの理由のために失敗することに留意されたいですあなたが不安定なcmdプロンプトから昇格したプロセスを強制終了しようとしている場合。

関連する問題