我已经创建了一个批处理文件来检查计划任务是否存在,如果他们没有创建它们,但是,即使作业不在那里,我的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
答案 0 :(得分:12)
您不能将if exist
与schtasks
一起使用,这不是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
由于我们只想测试失败,因此只使用||
(上一个命令失败)。