6 votes

Commande de sommeil dans un fichier batch ?

Lorsque j'écris un fichier batch pour s'exécuter automatiquement, comment puis-je l'écrire de sorte que lors de l'exécution du fichier batch, il puisse faire une pause de quelques secondes entre les commandes?

Contexte:

psexec \\serveur -u utilisateur -p mot de passe cmd
[il doit y avoir une pause ici pour que psexec établisse une connexion]
dir /s >output.txt \\serveur\partagé

*Note: la raison pour laquelle j'exécute la commande dir côté serveur en utilisant psexec et non localement est parce qu'il est beaucoup plus rapide d'exécuter dir sur une machine locale que à distance, et le temps est précieux.

Lorsque je le fais manuellement, c'est évidemment facile, je n'attends simplement. Mais exécuter un fichier batch le fait exécuter toutes les commandes à des vitesses presque instantanées les unes à côté des autres, indépendamment de l'état d'exécution de la dernière commande. Comment puis-je insérer une pause?

26voto

softmllx Points 440

Sous Windows Vista / Windows 7, vous pouvez utiliser la commande timeout :

timeout /T [délai en secondes] /NOBREAK > NUL

Sous les versions précédentes de Windows, vous pouvez utiliser la commande ping (la commande ping a un délai de 1000 ms entre chaque itération) :

ping -n [délai en secondes + 1] 127.0.0.1 > NUL

Certaines versions de Windows (comme Windows Server 2003) ont l'exécutable sleep.exe :

sleep [délai en secondes]

Remarque : Windows Resource kit pour 2003 contient la commande sleep.exe.

Si vous ne connaissez pas la version de Windows, utilisez simplement le hack du ping car il sera disponible.

8voto

manojlds Points 96599

Il y a une commande timeout dans les versions les plus récentes de Windows :

timeout /T 10

Le nombre suivant le T est le nombre de secondes. La commande ci-dessus attendra 10 secondes.

3voto

Rob Greene Points 31

Le kit de ressources Windows pour 2003 s'installera sur Windows XP. Il contient SLEEP.EXE qui peut être utilisé à partir d'un fichier de commandes batch.

Téléchargez-le ici http://www.microsoft.com/download/en/details.aspx?id=17657

2voto

septical Points 430

Je pense que les informations ici: http://malektips.com/xp_dos_0002.html l'expliqueraient mieux que moi.

Il reste cependant le cas de la gestion des erreurs (que faire si la machine distante n'est pas disponible ?). cmd.exe est assez inutile pour effectuer des activités à distance dans la plupart des cas, l'utilisation de powershell permettrait tellement plus.

MODIFICATION::

En fait, vous pouvez exécuter un programme stocké localement avec psexec (il est copié et exécuté localement côté serveur) - serait-ce une alternative plus viable ?

Sans savoir quelles commandes vous prévoyez d'exécuter, il est difficile d'aller plus loin.

MODIFICATION(2)::

Si ce n'est qu'une seule commande que vous exécutez, stockez-la simplement dans un fichier dédié, comme 'remote_dir_listing.cmd', puis utilisez psexec avec:

psexec \\server -u  -p  -c -f remote_dir_listing.cmd

Cela forcera une copie du fichier local vers le côté distant à chaque fois que vous l'exécutez (au cas où vous voudriez l'étendre). De cette façon, vous contournez le besoin d'une pause - seulement lorsque psexec a ouvert les canaux, il s'exécutera, et une fois terminé, il se fermera silencieusement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X