Vraag Hoe slaap je in een batchbestand?


Hoe kan de uitvoering een tijdje worden onderbroken in een Windows-batchbestand tussen een opdracht en de volgende?


114
2017-09-26 19:45


oorsprong


Is dit bedoeld om een ​​canoniek te worden? Als dat zo is, dan is een verklarende tekst misschien gepast. - John Gardeniers
"Toelichtingstekst" zoals in? - Massimo
De meeste, zo niet alle, canonieke vragen die ik heb gezien, bevatten een tekst die de bedoeling van die vraag beschrijft. - John Gardeniers
Of een tekst die de situatie uitlegt ... Het is vooral om te helpen met SEO, maar helpt ook om potentiële antwoorden in te kaderen. - Chris S
SEO werkt prima. Eerste hit voor mij op Google zoeken. - jbo5112


antwoorden:


De juiste manier om in een batchbestand te slapen, is door de timeout commando, geïntroduceerd in Windows 2000.

Wachten ergens tussen de 29 en 30 seconden:

timeout /t 30

De time-out wordt onderbroken als de gebruiker op een toets drukt; het commando accepteert echter ook de optionele schakelaar /nobreak, die in feite alles negeert dat de gebruiker mag indrukken, behalve een expliciete CTRL-C:

timeout /t 30 /nobreak

Als u bovendien niet wilt dat de opdracht het aftellen op het scherm afdrukt, kunt u de uitvoer omleiden naar NUL:

timeout /t 30 /nobreak > NUL

173
2017-09-26 19:45



De timeout-opdracht werkt niet met Windows XP, zelfs als de Resource-kit 2003 is geïnstalleerd en de slaapopdracht niet werkt in Windows 7, zodat de ping-opdracht nog steeds goed van pas kan komen als u het batchbestand zowel op Win7 als WinXP gebruikt.
time-out werkt niet in niet-interactieve scripts: "FOUT: invoeromleiding wordt niet ondersteund, waardoor het proces onmiddellijk wordt verlaten." dus de voorkeur gaat uit naar het gebruik van een hack met "ping". - iMysak


Omdat het hier ook van toepassing is, zal ik het kopiëren mijn antwoord van een andere site.

Als u ping wilt gebruiken, is er een betere manier. U wilt een adres pingen dat niet bestaat, zodat u een time-out met milliseconde precisie kunt opgeven. Gelukkig is zo'n adres gedefinieerd in een standaard (RFC 3330) en dat is het ook 192.0.2.x. Dit is niet verzonnen, het is echt een adres met het enige doel van niet-bestaande (het is misschien niet duidelijk, maar het is zelfs van toepassing in lokale netwerken):

192.0.2.0/24 - Dit blok is toegewezen als "TEST-NET" voor gebruik in      documentatie en voorbeeldcode. Het wordt vaak gebruikt in combinatie met      domeinnamen example.com of example.net in leverancier en protocol      documentatie. Adressen binnen dit blok mogen niet op de      openbaar internet.

Gebruik om 123 milliseconden te slapen ping 192.0.2.1 -n 1 -w 123 >nul


8
2017-07-17 10:58



Doe dat alsjeblieft niet, ook al is het dat wel licht beter dan een echt adres pingen. Ping is gewoon de fout gereedschap voor de klus. - Massimo
@Massimo Het is waarschijnlijk niet wat het was bedoeld om te doen :) Maar ik denk dat het nog steeds een goede oplossing is - het werkt in bepaalde scenario's (met name hogere resolutie) beter dan time-out. Het is ook behoorlijk bekend geworden, dus de meeste mensen zouden niet erg verrast zijn (d.w.z. verward) als ze het in je batchbestand zien. - mafu
Deze kwaliteitsbeoordeling is gemaakt precies om de juiste oplossing voor het probleem aan te wijzen, omdat er verschillende andere soortgelijke vragen zijn die werden beantwoord met "just use ping" of vergelijkbare kludges. - Massimo
@Massimo Oke! Ik denk dat we gewoon verschillende meningen hebben. Als je het niet erg vindt, laat ik dit antwoord nog steeds staan, omdat het beter lijkt dan localhost n keer te pingen zoals het vaakst wordt beschreven. - mafu
time-out is de juiste oplossing voor de besturingssystemen waarop het werkt. ping is de enige oplossing die werkt vanaf 5.1-6.3. Aangezien 25% van de systemen nog steeds op 5.1 staat, is time-out niet "op de juiste manier". - Wyrmwood


U kunt ook een ping invoegen in localhost. Dit duurt 4 seconden om te voltooien (standaard). Het wordt door sommigen als een kludge beschouwd, maar werkt toch best goed.

Het bevel:
    ping 127.0.0.1


5
2017-09-26 20:10



Ehm ... het hele doel van deze Q / A was precies om twee andere vragen te corrigeren die dit als hun geaccepteerd antwoord hebben, maar die niet langer kunnen worden gecorrigeerd omdat hun OP er niet meer is. - Massimo
Terwijl het werkt, is het het equivalent van het besturen van een schroef met een hamer. Een verkeerde tool werkt misschien, maar het is nog steeds verkeerd. - voretaq7
@MarkAllen Met andere woorden, Windows NT4, 95, 98, ME en ouder? - Chris McKeown
@MarkAllen - technisch moet je je dan zorgen maken over het al dan niet ping komt met uw besturingssysteem. Als je je zorgen genoeg maakt over '95 '98 of ME, dan zou je net zo bezorgd moeten zijn over 6.22 als dat niet het geval is ping een van beide - Mark Henderson♦
@MarkHenderson Het is gemakkelijker (voor mij) om te onthouden of een bepaalde versie van het besturingssysteem TCP / IP ondersteunt dan om te onthouden of het een opdracht bevat die ik niet eerder had gehoord. Je weet wel? - Mark Allen