2017-01-10 2 views
1

J'ai créé un fichier de commandes pour vérifier si la tâche planifiée existe et si elles ne la créent pas, cependant, ma règle si existe semble toujours être vraie même si les tâches ne sont pas présentes.SI existe pour une tâche planifiée

Des idées?

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

Vous ne pouvez pas utiliser 'IF EXIST' /' IF NOT EXIST' comme ça, vous devez lancer 'SchTasks' et capturer la sortie ou' ErrorLevel' et exécuter vos commandes en fonction de ce qu'elles renvoient. – Compo

+2

Ouvrez une nouvelle fenêtre d'invite de commande, tapez 'help if' ou' if /? 'Et lisez attentivement l'aide; vous apprendrez ce que «si existe» est pour ... – aschipfl

Répondre

4

Vous ne pouvez pas utiliser if exist avec schtasks, ce n'est pas le but de if exist.

utilisation soit

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

ou

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

>NUL 2>&1 suppress le succès ou la sortie d'erreur, mais nous avons errorlevel ensemble à 0 si le succès, ou non 0 si l'échec.

Les deux sont assez similaires. Dans le premier cas, nous utilisons les opérateurs cmd && et ||, où && signifie que la commande précédente a réussi et || signifie que la commande précédente a échoué.

comme dans

mycommand && echo success || echo error

Comme nous voulons seulement l'échec du test, utilisez alors seulement || (commande précédente a échoué).