web-dev-qa-db-ja.com

スケジュールされたタスクに存在する場合

スケジュールされたタスクが存在するかどうか、およびそれらが作成しないかどうかを確認するためにバッチファイルを作成しましたが、ジョブが存在しない場合でも、存在する場合のルールは常にtrueになっているようです。

何か案は?

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

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は成功またはエラー出力を抑制しますが、成功した場合はerrorlevel0に設定し、失敗した場合は0に設定します。

どちらもかなり同じです。最初のケースでは、cmd &&および||演算子を使用します。ここで、&&は前のコマンドが成功したことを意味し、||は前のコマンドが失敗したことを意味します。

のように

mycommand && echo success || echo error

失敗をテストしたいだけなので、||のみを使用します(前のコマンドは失敗しました)。

16
elzooilogico