如果存在计划任务

时间:2017-01-10 13:38:01

标签: batch-file cmd schtasks.exe

我已经创建了一个批处理文件来检查计划任务是否存在,如果他们没有创建它们,但是,即使作业不在那里,我的if exists规则似乎也总是如此。

有什么想法吗?

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

1 个答案:

答案 0 :(得分:12)

您不能将if existschtasks一起使用,这不是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会抑制成功或错误输出,但如果成功则errorlevel设置为0,如果失败则设置为0

两者都很相似。在第一种情况下,我们使用cmd &&||运算符,其中&&表示上一个命令成功,||表示上一个命令失败。

,如

mycommand && echo success || echo error

由于我们只想测试失败,因此只使用||(上一个命令失败)。