2017-01-10 3 views
1

예약 된 작업이 있는지 확인하기 위해 배치 파일을 만들었지 만 파일을 만들지 않으면 작업이 없는데도 내 if exists 규칙이 항상 맞는 것처럼 보입니다.예약 된 작업에 IF가 존재합니다.

아이디어가 있으십니까? 당신은 schtasksif exist 사용할 수 없습니다

::Check Rule 
IF EXIST SchTasks /QUERY /TN "Cache Task Morning" ( 
    echo ! Morning rule in place! 
    GOTO NEXT 
) ELSE IF NOT EXIST SchTasks /Create /SC DAILY /TN "Cache Task Morning" /TR "C:\Cache Clear\Cache Clear.bat" /ST 09:00 

:NEXT 
IF EXIST SchTasks /QUERY /TN "Cache Task Afternoon" ( 
    echo ! Afternoon rule in place! 
    GOTO NEXT TWO 
) ELSE IF NOT EXIST SchTasks /Create /SC DAILY /TN "Cache Task Afternoon" /TR "C:\Cache Clear\Cache Clear.bat" /ST 15:00 

:NEXT TWO 
IF EXIST SchTasks /QUERY /TN "Cache Task Evening" ( 
    echo ! Evening rule in place! 
    GOTO CLEAR CACHE 
) ELSE IF NOT EXIST SchTasks /Create /SC DAILY /TN "Cache Task Evening" /TR "C:\Cache Clear\Cache Clear.bat" /ST 18:00 
+4

'IF EXIST' /'IF NOT EXIST'와 같이 사용하면'SchTasks'를 실행하고 출력이나'ErrorLevel'을 캡쳐하고 커맨드를 리턴해야합니다. – Compo

+2

새 명령 프롬프트 창을 열고'help if' 또는'if /?'를 입력하고 도움말을주의 깊게 읽으십시오. '존재한다면'무엇을 배우게 될지 ... – aschipfl

답변

4

,이 if exist의 목적이 아니다.

사용 중

schtasks /query /TN "task_name" >NUL 2>&1 || schTasks /Create /SC DAILY /TN "task_name" ... 

또는

schtasks /query /TN "task_name" >NUL 2>&1 
if %errorlevel% NEQ 0 schTasks /Create /SC DAILY /TN "task_name" ... 

>NUL 2>&1 억제 성공 또는 오류 출력

,하지만 우리는 0- errorlevel 설정하면 성공을하거나하지 0 실패하는 경우.

둘 다 꽤 같습니다. 첫 번째 경우 cmd &&|| 연산자를 사용합니다. 여기서 &&은 이전 명령이 성공적임을 의미하고 ||은 이전 명령이 실패했음을 의미합니다.

우리는 실패를 테스트 할 것처럼

mycommand && echo success || echo error

같이 만 ||는 (이전 명령이 실패)를 사용합니다.