Windows toplu iş dosyasında bir komutla bir sonraki komut arasında yürütmeyi bir süre için nasıl duraklatabilirim?
Windows toplu iş dosyasında bir komutla bir sonraki komut arasında yürütmeyi bir süre için nasıl duraklatabilirim?
Yanıtlar:
Bir toplu iş dosyasında uyumanın doğru yolu timeout
, Windows 2000'de verilen komutu kullanmaktır .
29 ila 30 saniye arasında bir yerde beklemek için :
timeout /t 30
Kullanıcı herhangi bir tuşa basarsa zaman aşımı kesintiye uğrar; ancak, komut ayrıca /nobreak
, kullanıcının açıkça basabileceği herhangi bir şeyi etkin biçimde görmezden gelen isteğe bağlı anahtarı da kabul eder CTRL-C
:
timeout /t 30 /nobreak
Ek olarak, komutun geri sayımını ekranda yazdırmasını istemiyorsanız, çıktısını aşağıdakilere yönlendirebilirsiniz NUL
:
timeout /t 30 /nobreak > NUL
Burada da geçerli olduğu için cevabımı başka bir siteden kopyalayacağım .
Ping kullanmak istiyorsanız, daha iyi bir yol var. Var olmayan bir adrese ping atmak isteyeceksiniz, böylece milisaniye hassasiyetinde bir zaman aşımı belirtebilirsiniz. Neyse ki, böyle bir adres standartta tanımlanmaktadır (RFC 3330) ve öyledir 192.0.2.x
. Bu telafi edilmemiştir, gerçekten var olmayan tek adresidir (net olmayabilir, ancak yerel ağlarda bile geçerlidir):
192.0.2.0/24 - Bu blok dokümantasyonda ve örnek kodda kullanılmak üzere "TEST-NET" olarak atanmıştır. Genellikle satıcı ve protokol belgelerinde domain.com example.com veya example.net alan adları ile birlikte kullanılır. Bu bloktaki adreslerin genel internet ortamında görünmemesi gerekir.
123 milisaniye boyunca uyumak için ping 192.0.2.1 -n 1 -w 123 >nul
Ping
sadece iş için yanlış bir araçtır.
Ayrıca localhost'a bir ping ekleyebilirsiniz. Bu işlemin tamamlanması 4 saniye sürecektir (varsayılan olarak). Bazıları tarafından bir çamur olarak kabul edilir, ancak tamamen aynı şekilde çalışır.
Komut:
ping 127.0.0.1
ping
işletim sisteminizle gelip gelmediği konusunda endişelenmeniz gerekir. Eğer '95 '98 veya ME hakkında yeterince endişeleniyorsanız, o zaman ping
da sahip olmadıkları 6.22 kadar endişeli olmalısınız
Feragatname : Bu "ideal" bir çözüm değil, bu yüzden beni tavsiye edenlere yaptığı gibi başımın üstüne atmaya zahmet etmeyin ping
...
Mümkün timeout
olduğunda , kesin kullanın . Ancak yorumlarda belirtildiği gibi, bu her zaman bir seçenek değildir (örneğin etkileşimli olmayan modda). Ondan sonra, ping
"kludge" un belki de bir sonraki en iyi seçenek olduğuna katılıyorum , çünkü çok basit. Bu, başka bir seçenek teklif ediyorum ... bazı VB Komut Dosyalarını yerleştir .
Bu çözümün temeli, bunun ötesinde her türlü uygulamaya sahiptir. Çoğu zaman VBS, partinin yapamayacağı şeyleri yapabilir veya en azından bunu çok daha kolay bir şekilde yapabilir. Burada gösterilen tekniği kullanarak, ikisini karıştırabilirsiniz ("kesintisiz" değil, "işlevsel olarak" ...).
İşte bir geçici komut dosyası oluşturmak için bir liner, çalıştırmak, sonra silin. Senaryo sizin için uyuyor (bu örnekte 3 saniye boyunca).
echo WScript.Sleep 3000 > %temp%\sleep.vbs & cscript %temp%\sleep.vbs %sleepMs% //B & del %temp%\sleep.vbs
İşte temelde aynı şey, biraz farklı yazılmış:
set sleepMs=3000 & set sleepVbs=%temp%\sleep.vbs & echo WScript.Sleep WScript.Arguments(0) > %sleepVbs% & cscript %sleepVbs% %sleepMs% //B & del %sleepVbs%
Ve sonunda, gibi ping
, CScript
kendisi bir zaman aşımı seçeneği vardır! Bu nedenle, komut dosyasında sonsuz bir döngü girerseniz, tercümanın süreyi zorlamasını sağlayabilirsiniz. Bu işlemin CPU'yu yiyen "meşgul" bir işlem olduğunu ve bu nedenle WScript.Sleep
prosedürü ne zaman kullanabileceğinizi önermiyorum , ancak tamamlama uğruna kavramsal bir seçenek olarak sunuyorum:
set sleepSec=3 & set sleepVbs=%temp%\sleep.vbs & echo While True > %sleepVbs% & echo Wend >> %sleepVbs% & cscript %sleepVbs% //B //T:%sleepSec% & del %sleepVbs%