2016-10-16 3 views
1

Ich habe ein kleines Skript zum Töten einiger Prozesse. Es funktioniert gut, außer wenn ein Prozess nicht gefunden wird, zeigt es die Fehlermeldung an. Das Hinzufügen von 2 > nul wird das Problem nicht lösen, da der Fehler verworfen wird ...Auf Fehler prüfen, aber nicht zeigen

Wie verhindert man, dass der Fehler angezeigt wird, und einige sinnvolle Nachricht anzeigen?

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 
    ) 
) 

Antwort

1

die Syntax für errorlevel verwendet Ändern Überprüfung (der Ausdruck if errorlevel n bedeutet wenn Errorlevel gleich oder größer n ist)

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 
    ) 
) 

bedingte Ausführung Operatoren (&& auszuführen =, wenn der vorherige Befehl war erfolgreich, || = Ausführen, wenn der vorherige Befehl fehlgeschlagen ist)

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

verzögert Die Erweiterungs (ohne es mit der errorlevel Leseoperation mit dem Wert in der Variable ersetzt, wenn der vollständige Block analysiert wurde, können Sie den geändertenen Wert nicht abrufen)

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 
    ) 
) 

Aber denken Sie daran all diese Proben sind ein Vereinfachung. Ex. taskkill kann auch fehlschlagen, wenn der Prozess nicht beendet werden kann.

0

Lese EnableDelayedExpansion

Verzögerte Expansion bewirkt, dass Variablen bei der Ausführung Zeit erweitert werden, anstatt zur Analysezeit, diese Option mit dem SETLOCAL Befehl eingeschaltet. Bei verzögerter Erweiterung können die Variablen mit !variable_name! referenziert werden (zusätzlich zu den normalen %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 
    ) 
) 

oder

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. 
    ) 
) 

Beachten Sie, dass TASKKILL Befehl könnte mehr Gründen fehlschlagen, nicht nur für die, dass ein Prozess runninq nicht, z.B. wenn Sie versuchen, einen erhöhten Prozess von einer nicht erhöhten cmd Aufforderung zu töten.

Verwandte Themen