2011-10-31 5 views
6

Quando sto scrivendo un file batch per l'esecuzione automatica, come posso scriverlo in modo che quando viene eseguito il file batch, possa sospendere per un paio di secondi tra i comandi?Comando di sospensione nel file batch?

Contesto:

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 ragione ho eseguito il lato server comando dir utilizzando psexec e non a livello locale è perché è molto più veloce per eseguire dir su un computer locale che da remoto, e il tempo è di l'essenza.

Quando lo faccio a mano è ovviamente facile, io aspetto. Tuttavia, l'esecuzione di un file batch consente di eseguire tutti i comandi a velocità quasi istantanee l'una accanto all'altra, indipendentemente dallo stato di completamento dell'ultimo comando. Come inserisco una pausa?

+0

Possibile duplicato di [Sleeping in a batch file] (http://stackoverflow.com/questions/166044/sleeping-in-a-batch-file) –

+1

http://stackoverflow.com/a/7958678/206730 è più utile, può essere indicato come risposta – Kiquenet

risposta

2

penso che le informazioni qui: http://malektips.com/xp_dos_0002.html spiegherebbe meglio di me

C'è ancora il caso di gestione degli errori anche se (cosa succede se il computer remoto non è all'altezza?). cmd.exe è abbastanza inutile per fare attività remote per la maggior parte, utilizzando PowerShell potrebbe consentire molto di più.

EDIT ::

In realtà, è possibile eseguire un programma memorizzato localmente con psexec (esso viene copiato in tutto ed eseguito localmente lato server) - sarebbe utilizzando tale sia una più valida alternativa?

Senza sapere quali comandi si intende eseguire è difficile portarlo molto oltre.

EDIT (2) ::

Se è solo quello di comando è in esecuzione, è sufficiente memorizzare in un file dedicato, come 'remote_dir_listing.cmd', e quindi utilizzare psexec con:

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

Ciò imporrà una copia del file locale sul lato remoto ogni volta che lo si esegue (nel caso in cui si desideri espanderlo). In questo modo, si ignora la necessità di una pausa - solo quando psexec ha i tubi aperti verrà eseguito, e una volta completato, si chiude in silenzio.

+0

Fantastico! Grazie! – jayjyli

7

C'è timeout comando nella versione più recente di Windows:

timeout /T 10 
24

In Windows   Vista/Windows   7 è possibile utilizzare il comando timeout:

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

Nelle versioni precedenti di Windows, è possibile utilizzare il comando ping (il comando ping ha 1000   ms di ritardo tra ogni iterazione):

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

Alcune versioni di Windows (come Windows Server 2003) ha il sonno.exe eseguibile:

sleep [delay in seconds] 

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

Se non si conosce la versione di Windows, è sufficiente utilizzare il ping hack poiché sarà disponibile.

+1

Direi che la maggior parte delle persone che vengono da google troveranno questa risposta (non quella accettata) più utile. –

+1

Dato che il TCP/IP è ormai onnipresente, usando * ping * di solito funziona, ma solo se si utilizza TCP/IP (una macchina Windows client potrebbe utilizzare NetBEUI o IPX/SPX). Rif: http://www.techrepublic.com/article/get-it-done-the-complete-windows-2000-client-tcp-ip-configuration-guide/ –