2011-10-31 36 views
6

Cuando estoy escribiendo un archivo por lotes para ejecutarlo automáticamente, ¿cómo lo escribo para que cuando se ejecute el archivo por lotes, pueda pausar durante unos segundos entre los comandos?¿Comando inactivo en archivo por lotes?

Contexto:

psexec \\server -u user -p pass cmd 
[there needs to be a pause here for psexec to establish a connection] 
dir /s >output.txt \\server\shared 

* Nota: la razón por la que ejecutar el servidor del lado del comando dir usando psexec y no a nivel local es porque es mucho más rápido para ejecutar dir en un equipo local de forma remota, y el tiempo es de la esencia.

Cuando estoy haciendo esto a mano es obviamente fácil, solo espero. Pero al ejecutar un archivo por lotes, ejecuta todos los comandos a velocidades casi instantáneas una al lado de la otra, independientemente del estado de finalización del último comando. ¿Cómo pongo una pausa?

+0

Posible duplicado de [Dormir en un archivo por lotes] (http://stackoverflow.com/questions/166044/sleeping-in-a-batch-file) –

+1

http://stackoverflow.com/a/7958678/206730 es más útil, tal vez sea marcar como respuesta – Kiquenet

Respuesta

2

creo que la información aquí: http://malektips.com/xp_dos_0002.html explicaría mejor que yo

No es todavía el caso de la gestión de errores, aunque (¿y si la máquina remota no está?). cmd.exe es bastante inútil para realizar actividades remotas en su mayor parte, el uso de powershell permitiría mucho más.

EDITAR ::

De hecho, se puede ejecutar un programa almacenado localmente con psexec (que se copia a través y ejecuta localmente en el servidor) - haría con que sea una alternativa más viable?

Sin saber qué comandos tiene la intención de ejecutar, es difícil llevarlo más lejos.

EDITAR (2) ::

Si es sólo la única orden que se está ejecutando, sólo tiene que almacenar en un archivo dedicado, como 'remote_dir_listing.cmd', y luego usar psexec con:

psexec \\server -u <user> -p <pass> -c -f remote_dir_listing.cmd 

Esto forzará una copia del archivo local al lado remoto cada vez que lo ejecute (en caso de que desee expandirlo). De esta forma, se omite la necesidad de una pausa en absoluto; solo cuando psexec tenga las tuberías abiertas se ejecutará, y una vez que se complete, se cerrará silenciosamente.

+0

¡Fantástico! ¡Gracias! – jayjyli

7

Hay timeout de comandos en la versión más reciente de Windows de:

timeout /T 10 
24

En Windows   Vista/Windows   7 puede utilizar el comando de tiempo de espera:

timeout /T [delay in seconds] /NOBREAK > NUL 

En versiones anteriores de Windows, puede usar el comando ping (el comando ping tiene 1000   ms de retardo entre cada iteración):

ping -n [delay in seconds + 1] 127.0.0.1 > NUL 

Algunas versiones de Windows (como Windows Server 2003) tiene el sueño.exe ejecutable:

sleep [delay in seconds] 

Nota: Windows Resource kit for 2003 contiene Sleep.exe comando.

Si usted no sabe la versión de Windows, basta con utilizar el truco de ping ya que va a estar disponible.

+1

Diría que la mayoría de las personas que vienen aquí desde Google encontrarán esta respuesta (no la aceptada) más útil. –

+1

Como TCP/IP es ahora omnipresente, utilizando * * de ping normalmente trabajar, pero sólo si se utiliza TCP/IP (una máquina Windows cliente podría utilizar NetBEUI o IPX/SPX en su lugar). Ref: http://www.techrepublic.com/article/get-it-done-the-complete-windows-2000-client-tcp-ip-configuration-guide/ –

Cuestiones relacionadas