shell - Windows batch: sove

Indlæg af Hanne Mølgaard Plasc

Problem




    Dette spørgsmål har allerede et svar her:

    

            

  •             Sove i en batchfil
                    
                        29 svar
                    

            

  •     

Bedste reference


Du kan prøve /questions/166044/sleeping-in-a-batch-file


ping -n XXX 127.0.0.1 >nul


hvor XXX er antallet af sekunder at vente plus en.

Andre referencer 1


Jeg ved ikke, hvorfor disse kommandoer ikke virker for dig, men du kan også prøve timeout [28]


timeout <delay in seconds>

Andre referencer 2


timeout /t 10 /nobreak > NUL


/t angiver klokkeslættet for at vente i sekunder


/nobreak vil ikke afbryde timeouten, hvis du trykker på en knap (undtagen CTRL-C)


> NUL vil undertrykke udgangen af ​​kommandoen

Andre referencer 3


At vente 10 sekunder:


choice /T 10 /C X /D X /N

Andre referencer 4


Microsoft har en søvnfunktion, du kan ringe direkte.


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


Du kan bare sige sove 1 for eksempel at sove i 1 sekund i dit batch script.


IMO Ping er lidt af et hack til denne brugs sag.

Andre referencer 5


For et rent cmd.exe script kan du bruge dette stykke kode, der returnerer den aktuelle tid på hundredvis af sekunder.


: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


Du kan så bruge det i en ventetur sådan.


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


Og sætte alle stykker sammen:


@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


For en mere detaljeret beskrivelse af de kommandoer, der bruges her, skal du tjekke oplysningerne HELP SET og HELP CALL.

Andre referencer 6


Windows 2003 Resource Kit har en sleep batchfil. Hvis du nogensinde flytter op til PowerShell, kan du bruge: [29] [30]


Start-Sleep -s <time to sleep>


Eller noget i den stil.

Andre referencer 7


Jeg stoler på JScript. Jeg har en JScript-fil som denne: [31]


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


Og i en batch-fil kører jeg det med CScript (normalt er det \%SystemRoot\%system32cscript.exe) [32]


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

Andre referencer 8


Heh, Windows er uhm ... interessant. Dette virker:


choice /T 1 /d y > NUL


choice præsenterer en prompt og spørger dig ja eller nej. /d y får det til at vælge ja. /t 1 gør det vente et sekund, før du skriver det. > NUL squashes output.

Andre referencer 9


Jeg skrev bare min egen søvn, der kaldte Win32 Sleep API-funktionen. [33] [34]

Andre referencer 10


RJLsoftware har et lille værktøj kaldet DelayExec.exe. Med dette kan du udføre en forsinket start af et program i batches og Windows-registreringsdatabasen (mest nyttige i ... Windows/.../Kør registreringsdatabasen). [35] [36]


Anvendelseseksempel:


delayexec "C:WINDOWSsystem32
otepad.exe" 10


eller som en sovende kommando:


delayexec "nothing" 10

Andre referencer 11


Personligt bruger jeg Perl en-liner: [37]


perl -e "sleep 10;"


for en 10-sekunders ventetid. Chancerne er, at du allerede har Perl installeret på en udviklingsmaskine som en del af din git-installation, hvis du ikke skal installere den fra ActiveState eller Strawberry, men det er en af ​​de ting, jeg installerer alligevel. [38] [39]


Alternativt kan du installere en søvnkommando fra GnuWin32. [40]