Pertanyaan Bagaimana cara tidur dalam file batch?


Bagaimana menghentikan sementara eksekusi untuk sementara waktu di file batch Windows antara perintah dan yang berikutnya?


114
2017-09-26 19:45




Apakah ini dimaksudkan untuk menjadi kanonik? Jika demikian maka beberapa teks penjelasan mungkin sesuai. - John Gardeniers
"Teks penjelasan" seperti dalam? - Massimo
Sebagian besar, jika tidak semua, pertanyaan kanonik yang pernah saya lihat termasuk teks yang menjelaskan maksud dari pertanyaan itu. - John Gardeniers
Atau beberapa teks yang menjelaskan situasinya ... Sebagian besar untuk membantu dengan SEO, tetapi juga membantu untuk membingkai potensi Jawaban. - Chris S
SEO bekerja dengan baik. Hitungan pertama untuk saya di pencarian Google. - jbo5112


Jawaban:


Cara yang benar untuk tidur dalam file batch adalah dengan menggunakan timeout perintah, diperkenalkan pada Windows 2000.

Menunggu suatu tempat antara 29 dan 30 detik:

timeout /t 30

Batas waktu akan terganggu jika pengguna menekan tombol apa saja; namun, perintah juga menerima sakelar opsional /nobreak, yang secara efektif mengabaikan apa pun yang dapat ditekan oleh pengguna, kecuali yang eksplisit CTRL-C:

timeout /t 30 /nobreak

Selain itu, jika Anda tidak ingin perintah untuk mencetak hitungan mundur di layar, Anda dapat mengarahkan outputnya ke NUL:

timeout /t 30 /nobreak > NUL

173
2017-09-26 19:45



Perintah timeout tidak bekerja dengan Windows XP bahkan dengan 2003 Resource kit diinstal dan perintah tidur tidak berfungsi di Windows 7 sehingga perintah ping masih dapat digunakan dengan baik jika Anda menggunakan file batch pada Win7 dan WinXP.
batas waktu tidak berfungsi dalam skrip non-interaktif: "ERROR: Pengalihan masukan tidak didukung, segera keluar dari proses." jadi terkadang menggunakan hack dengan "ping" lebih disukai. - iMysak


Karena itu 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 alamat yang tidak ada, sehingga Anda dapat menentukan batas waktu dengan ketepatan milidetik. Untungnya, alamat seperti itu didefinisikan dalam standar (RFC 3330), dan memang demikian 192.0.2.x. Ini bukan dibuat-buat, itu benar-benar alamat dengan tujuan tunggal yang tidak ada (mungkin tidak jelas, tetapi berlaku bahkan di jaringan lokal):

192.0.2.0/24 - Blok ini ditetapkan sebagai "TEST-NET" untuk digunakan dalam      dokumentasi dan contoh kode. Ini sering digunakan bersamaan dengan      nama domain example.com atau example.net di vendor dan protokol      dokumentasi. Alamat dalam blok ini seharusnya tidak muncul di      Internet publik.

Untuk tidur selama 123 milidetik, gunakan ping 192.0.2.1 -n 1 -w 123 >nul


8
2017-07-17 10:58



Tolong jangan lakukan itu, bahkan jika itu sedikit lebih baik daripada ping alamat asli. Ping hanyalah salah alat untuk pekerjaan itu. - Massimo
@Massimo Kemungkinan besar bukan itu yang dimaksudkan untuk dilakukan :) Tapi saya pikir itu solusi yang baik masih - itu bekerja lebih baik daripada waktu dalam beberapa skenario (khususnya resolusi yang lebih tinggi). Juga, itu menjadi sangat terkenal, sehingga kebanyakan orang tidak akan sangat terkejut (mis. Bingung) ketika mereka melihatnya di file batch Anda. - mafu
QA ini dibuat persis untuk menunjukkan solusi yang tepat untuk masalah ini, karena ada beberapa pertanyaan serupa lainnya yang dijawab dengan "hanya menggunakan ping" atau kludges serupa. - Massimo
@Massimo Baiklah! Saya kira kita hanya memiliki pandangan yang berbeda. Jika Anda tidak keberatan saya akan tetap meninggalkan jawaban ini karena sepertinya lebih baik daripada ping localhost n kali seperti yang paling sering dijelaskan. - mafu
timeout adalah solusi yang tepat untuk sistem operasi yang digunakannya. ping adalah satu-satunya solusi yang bekerja dari 5.1-6.3. Dengan 25% sistem masih pada 5.1, timeout bukan "cara yang benar". - Wyrmwood


Anda juga dapat memasukkan ping ke localhost. Ini akan memakan waktu 4 detik untuk diselesaikan (secara default). Ini dianggap sebagai kludge oleh beberapa orang, tetapi bekerja dengan sangat baik.

Perintah:
    ping 127.0.0.1


5
2017-09-26 20:10



Ehm ... seluruh tujuan dari Q / A ini adalah persis untuk memperbaiki dua pertanyaan lain yang menjadikan ini sebagai jawaban yang diterima, tetapi tidak dapat diperbaiki lagi karena OP mereka tidak ada lagi. - Massimo
Sementara itu akan bekerja itu setara dengan mengendarai sekrup dengan palu. Alat yang salah bisa berfungsi, tetapi masih salah. - voretaq7
@MarkAllen Dengan kata lain, Windows NT4, 95, 98, ME dan yang lebih tua? - Chris McKeown
@MarkAllen - secara teknis Anda kemudian harus khawatir tentang apakah atau tidak ping dilengkapi dengan OS Anda. Jika Anda cukup khawatir tentang '95 '98 atau ME maka Anda harus sama-sama khawatir tentang 6,22 yang tidak memiliki ping antara - Mark Henderson♦
@MarkHenderson Lebih mudah (bagi saya) untuk mengingat apakah rilis tertentu dari OS mendukung TCP / IP daripada mengingat apakah atau tidak menyertakan perintah yang saya belum dengar sebelumnya. Kamu tahu? - Mark Allen