如果计划任务存在

IF exist for scheduled task

我已经创建了一个批处理文件来检查计划任务是否存在以及它们是否不创建它们,但是,即使作业不存在,我的 if 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 

您不能将 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

因为我们只想测试失败,所以只使用||(之前的命令失败)。