2016-10-16 2 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 
    ) 
) 
지연 확장을 사용 6,

(전체 블록이 구문 분석 된 변수의 내부 값으로 대체 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 
    ) 
) 

그러나이 모든 샘플은 기억 해요 단순화. 전의. taskkill 또한 프로세스를 종료 할 수없는 경우 실패 할 수 있습니다.

0

이 옵션은 SETLOCAL 명령으로 설정되어, EnableDelayedExpansion

지연 확장 변수가 실행 시간보다는 구문 분석시에 확장하게됩니다 읽어 보시기 바랍니다. 지연된 확장이 유효한 변수 인 경우 은 !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 프롬프트에서 상승 된 프로세스를 죽이려는 경우

관련 문제