web-dev-qa-db-fra.com

fonction sommeil dans un script batch

Je crée un fichier batch pour exécuter un programme sur mon bureau xyz.exe pendant 4 heures, puis fermez-le pendant 1 heure et répétez le processus. Voici mon script.

:a
START C:\Users\Mukul\Desktop\xyz.exe
SLEEP 14400
taskkill /F /IM xyz.exe
SLEEP 3600
goto :a

Selon ici , le script devrait attendre. Cela dit aussi:

SLEEP 10

retardera l'exécution de la prochaine commande de 10 secondes. donc SLEEP 14400 devrait retarder l'exécution de 4 heures.

Résultats actuels: La commande suivante est exécutée dès que la première commande est terminée.

Résultats souhaités: La prochaine commande doit attendre 4 heures avant d'exécuter la dernière commande.

6
Mukul Chauhan

Vous pouvez également utiliser timeout.

Voici un exemple:

@echo off
echo Hi
timeout /t 1 /nobreak > nul
  • /t n'est pas obligatoire

  • 1 est le nombre de secondes à attendre

  • /nobreak garantit que l'utilisateur ne peut pas sauter l'attente

  • > nul redirige la sortie vers rien, donc vous ne voyez rien

10
LeoDog896

La commande SLEEP peut ne pas être prise en charge par votre version de Windows. Essaye ça:

:a
START C:\Users\Mukul\Desktop\xyz.exe
TIMEOUT 14400
taskkill /F /IM xyz.exe
TIMEOUT 3600
goto :a
5
sambul35

Tout d'abord: Bash et Batch sont des langues très différentes.
Maintenant, la réponse.
Je préfère la commande ping à la commande sleep, car il est facile de basculer entre les secondes et les millisecondes:

ping -n 11 127.0.0.1>nul

Cette commande fait une pause de 10 secondes puis reprend.
Ou:

ping 1.1.1.1 -n 1 -w 10001 >nul

Qui marque également une pause de 10 secondes, mais en millisecondes.

Les deux peuvent être adaptés en:

:a
start C:\Users\Mukul\Desktop\xyz.exe
ping -n 14401 127.0.0.1>nul
taskkill /F /IM xyz.exe
ping -n 3601 127.0.0.1>nul
goto a

CLAUSE DE NON-RESPONSABILITÉ : J'ai PAS essayé le dernier morceau de code (parce que je ne ' t avoir 4 heures supplémentaires pour faire quelque chose).

5
ender_scythe