Batch di Windows: sleep

Come posso ottenere uno script batch di Windows per attendere qualche secondo?

sleep e wait non sembrano funzionare (comando non riconosciuto).

Puoi provare

 ping -n XXX 127.0.0.1 >nul 

dove XXX è il numero di secondi da attendere, più uno.

Non so perché quei comandi non funzionano per te, ma puoi anche provare il timeout

 timeout  
 timeout /t 10 /nobreak > NUL 

/t specifica il tempo di attesa in secondi

/nobreak non interromperà il timeout se si preme un pulsante (eccetto CTRL-C)

> NUL sopprimerà l’output del comando

Per attendere 10 secondi:

 choice /T 10 /CX /DX /N 

Microsoft ha una funzione sleep che puoi chiamare direttamente.

  Usage: sleep time-to-sleep-in-seconds sleep [-m] time-to-sleep-in-milliseconds sleep [-c] commited-memory ratio (1%-100%) 

Puoi semplicemente dire ad esempio il sonno 1 di dormire per 1 secondo nel tuo script di gruppo.

IMO Ping è un po ‘un hack per questo caso d’uso.

Per uno script di cmd.exe puro, è ansible utilizzare questo pezzo di codice che restituisce l’ora corrente in centinaia di secondi.

 :gettime set hh=%time:~0,2% set mm=%time:~3,2% set ss=%time:~6,2% set cc=%time:~-2% set /A %1=hh*360000+mm*6000+ss*100+cc goto :eof 

Potresti quindi usarlo in un ciclo di attesa come questo.

 :wait call :gettime wait0 :w2 call :gettime wait1 set /A waitt = wait1-wait0 if !waitt! lss %1 goto :w2 goto :eof 

E mettendo insieme tutti i pezzi:

 @echo off setlocal enableextensions enabledelayedexpansion call :gettime t1 echo %t1% call :wait %1 call :gettime t2 echo %t2% set /A tt = (t2-t1)/100 echo %tt% goto :eof :wait call :gettime wait0 :w2 call :gettime wait1 set /A waitt = wait1-wait0 if !waitt! lss %1 goto :w2 goto :eof :gettime set hh=%time:~0,2% set mm=%time:~3,2% set ss=%time:~6,2% set cc=%time:~-2% set /A %1=hh*360000+mm*6000+ss*100+cc goto :eof 

Per una descrizione più dettagliata dei comandi usati qui, selezionare HELP SET e HELP CALL .

Il Resource Kit di Windows 2003 ha un file batch di sleep . Se si passa a PowerShell , è ansible utilizzare:

 Start-Sleep -s  

O qualcosa di simile.

Mi affido a JScript . Ho un file JScript come questo:

 // This is sleep.js WScript.Sleep( WScript.Arguments( 0 ) ); 

E all’interno di un file batch lo eseguo con CScript (di solito è %SystemRoot%\system32\cscript.exe )

 rem This is the calling inside a BAT file to wait for 5 seconds cscript /nologo sleep.js 5000 

Heh, Windows è uhm … interessante. Questo funziona:

 choice /T 1 /dy > NUL 

choice presenta un prompt che ti chiede si o no. /dy fa scegliere sì. /t 1 fa aspettare un secondo prima di scriverlo. > NUL Uscita > NUL zucche.

Ho appena scritto il mio sonno che ha chiamato la funzione Win32 Sleep API .

RJLsoftware ha una piccola utility chiamata DelayExec.exe . Con questo è ansible eseguire un avvio ritardato di qualsiasi programma nei batch e nel registro di Windows (molto utile in … Windows /…/ Esegui registro).

Esempio di utilizzo:

 delayexec "C:\WINDOWS\system32\notepad.exe" 10 

o come comando di sonno:

 delayexec "nothing" 10 

Personalmente uso una carta perlata Perl :

 perl -e "sleep 10;" 

per un’attesa di 10 secondi. Probabilmente avrai già installato Perl su un computer di sviluppo come parte della tua installazione git; se non è necessario installarlo, ad esempio, da ActiveState o Strawberry , ma è una di quelle cose che installo comunque.

In alternativa, è ansible installare un comando di sospensione da GnuWin32 .