Bagaimana cara menjeda eksekusi untuk sementara waktu dalam file batch Windows antara perintah dan yang berikutnya?
Bagaimana cara menjeda eksekusi untuk sementara waktu dalam file batch Windows antara perintah dan yang berikutnya?
Jawaban:
Cara yang benar untuk tidur dalam file batch adalah dengan menggunakan timeout
perintah, yang diperkenalkan pada Windows 2000.
Untuk menunggu di suatu tempat antara 29 dan 30 detik :
timeout /t 30
Waktu tunggu akan terputus jika pengguna menekan tombol apa saja; namun, perintah itu juga menerima sakelar opsional /nobreak
, yang secara efektif mengabaikan apa pun yang dapat ditekan pengguna, kecuali secara eksplisit CTRL-C
:
timeout /t 30 /nobreak
Selain itu, jika Anda tidak ingin perintah untuk mencetak hitungan mundurnya di layar, Anda dapat mengarahkan hasilnya ke NUL
:
timeout /t 30 /nobreak > NUL
Karena ini berlaku di sini juga, saya akan menyalin jawaban saya dari situs lain .
Jika Anda ingin menggunakan ping, ada cara yang lebih baik. Anda akan ingin melakukan ping ke alamat yang tidak ada, sehingga Anda dapat menentukan batas waktu dengan presisi milidetik. Untungnya, alamat seperti itu didefinisikan dalam standar (RFC 3330), dan memang demikian 192.0.2.x
. Ini tidak dibuat-buat, ini benar-benar alamat dengan tujuan tidak ada (mungkin tidak jelas, tetapi berlaku bahkan di jaringan lokal):
192.0.2.0/24 - Blok ini ditugaskan sebagai "TEST-NET" untuk digunakan dalam dokumentasi dan contoh kode. Ini sering digunakan bersama dengan nama domain example.com atau example.net dalam dokumentasi vendor dan protokol. Alamat dalam blok ini tidak akan muncul di Internet publik.
Untuk tidur selama 123 milidetik, gunakan ping 192.0.2.1 -n 1 -w 123 >nul
Ping
hanyalah alat yang salah untuk pekerjaan itu.
Anda juga dapat memasukkan ping ke localhost. Ini akan memakan waktu 4 detik untuk menyelesaikan (secara default). Ini dianggap sebagai kludge oleh beberapa orang, tetapi bekerja dengan cukup baik.
Perintah:
ping 127.0.0.1
ping
datang dengan OS Anda. Jika Anda cukup khawatir tentang '95 '98 atau ME, maka Anda juga harus sama khawatirnya dengan 6.22 yang tidak memiliki ping
keduanya
Penafian : ini bukan solusi "ideal", jadi jangan repot-repot memukuli saya seperti yang dilakukan pada mereka yang merekomendasikan ping
...
Jika memungkinkan, gunakan timeout
dengan pasti. Tetapi seperti yang disebutkan dalam komentar, itu tidak selalu menjadi pilihan (misalnya dalam mode non-interaktif). Setelah itu, saya setuju bahwa ping
"kludge" mungkin merupakan pilihan terbaik berikutnya, karena sangat sederhana. Yang mengatakan, saya menawarkan opsi lain ... embed VB Script .
Dasar dari solusi ini memiliki segala macam aplikasi di luar ini. Seringkali VBS dapat melakukan hal-hal yang tidak dapat dilakukan batch, atau paling tidak melakukannya dengan lebih mudah secara drastis. Dengan menggunakan teknik yang diilustrasikan di sini, Anda dapat mencampur keduanya (tidak "mulus", tetapi "fungsional" ...).
Berikut ini adalah satu baris, untuk membuat skrip temp, jalankan, lalu hapus. Script melakukan tidur untuk Anda (selama 3 detik dalam contoh ini).
echo WScript.Sleep 3000 > %temp%\sleep.vbs & cscript %temp%\sleep.vbs %sleepMs% //B & del %temp%\sleep.vbs
Ini pada dasarnya hal yang sama, ditulis sedikit berbeda:
set sleepMs=3000 & set sleepVbs=%temp%\sleep.vbs & echo WScript.Sleep WScript.Arguments(0) > %sleepVbs% & cscript %sleepVbs% %sleepMs% //B & del %sleepVbs%
Dan akhirnya, seperti ping
, CScript
itu sendiri memiliki opsi batas waktu! Jadi, jika Anda memasukkan loop tak terbatas dalam skrip, Anda dapat membiarkan penerjemah memberlakukan durasi. Catatan, ini adalah operasi "sibuk", yang memakan CPU, dan karena itu saya tidak merekomendasikannya ketika Anda dapat menggunakan WScript.Sleep
prosedur, tapi saya menyajikannya sebagai opsi konseptual demi kelengkapan:
set sleepSec=3 & set sleepVbs=%temp%\sleep.vbs & echo While True > %sleepVbs% & echo Wend >> %sleepVbs% & cscript %sleepVbs% //B //T:%sleepSec% & del %sleepVbs%