วิธีหยุดการทำงานชั่วคราวชั่วขณะหนึ่งในไฟล์แบตช์ Windows ระหว่างคำสั่งและไฟล์ถัดไป
วิธีหยุดการทำงานชั่วคราวชั่วขณะหนึ่งในไฟล์แบตช์ Windows ระหว่างคำสั่งและไฟล์ถัดไป
คำตอบ:
วิธีที่ถูกต้องในโหมดสลีปในไฟล์แบตช์คือการใช้timeout
คำสั่งที่แนะนำใน Windows 2000
หากต้องการรอสักครู่ระหว่าง 29 ถึง 30 วินาที :
timeout /t 30
การหมดเวลาจะถูกขัดจังหวะหากผู้ใช้กดปุ่มใด ๆ อย่างไรก็ตามคำสั่งยังยอมรับสวิตช์ทางเลือก/nobreak
ซึ่งจะไม่สนใจสิ่งใดที่ผู้ใช้อาจกดยกเว้นที่ชัดเจนCTRL-C
:
timeout /t 30 /nobreak
นอกจากนี้หากคุณไม่ต้องการให้คำสั่งพิมพ์การนับถอยหลังบนหน้าจอคุณสามารถเปลี่ยนเส้นทางการแสดงผลไปที่NUL
:
timeout /t 30 /nobreak > NUL
เพราะมันใช้ที่นี่มากเกินไปผมจะคัดลอกคำตอบของฉันจากเว็บไซต์อื่น
หากคุณต้องการใช้ ping มีวิธีที่ดีกว่า คุณจะต้องการ ping ที่อยู่ที่ไม่มีอยู่ดังนั้นคุณสามารถระบุการหมดเวลาด้วยความแม่นยำมิลลิวินาที โชคดีเช่นที่อยู่ที่กำหนดไว้ในมาตรฐาน (RFC 3330) 192.0.2.x
และมันก็เป็น สิ่งนี้ไม่ได้สร้างขึ้นจริง ๆ เป็นที่อยู่ที่มีจุดประสงค์เพียงอย่างเดียวของการไม่มีอยู่จริง (อาจไม่ชัดเจน แต่ใช้ได้แม้ในเครือข่ายท้องถิ่น):
192.0.2.0/24 - บล็อกนี้ถูกกำหนดเป็น "TEST-NET" เพื่อใช้ในเอกสารประกอบและโค้ดตัวอย่าง มักใช้ร่วมกับชื่อโดเมน example.com หรือ example.net ในเอกสารประกอบของผู้ขายและโปรโตคอล ที่อยู่ในบล็อกนี้ไม่ควรปรากฏบนอินเทอร์เน็ตสาธารณะ
หากต้องการนอนเป็นเวลา 123 มิลลิวินาทีให้ใช้ ping 192.0.2.1 -n 1 -w 123 >nul
Ping
เป็นเครื่องมือที่ผิดสำหรับงาน
คุณยังสามารถแทรก ping ไปยัง localhost ขั้นตอนนี้จะใช้เวลา 4 วินาทีจึงจะเสร็จสมบูรณ์ (โดยค่าเริ่มต้น) บางคนก็ถือว่าเป็นกระบอง แต่ก็ใช้งานได้ดีเหมือนกันทั้งหมด
คำสั่ง:
ping 127.0.0.1
ping
มาพร้อมกับระบบปฏิบัติการของคุณหรือไม่ หากคุณกังวลพอเกี่ยวกับ '95 '98 หรือ ME คุณควรกังวลอย่างเท่าเทียมกันเกี่ยวกับ 6.22 ซึ่งไม่มีping
เช่นกัน
คำเตือน : นี่ไม่ใช่ทางออกที่ "ดีเลิศ" ดังนั้นอย่าไปตบหัวฉันอย่างที่ทำกับผู้ที่แนะนำping
...
หากเป็นไปได้ให้ใช้อย่างtimeout
แน่นอน แต่ดังที่ระบุไว้ในความคิดเห็นนั่นไม่ใช่ตัวเลือกเสมอ (เช่นในโหมดที่ไม่ใช่แบบโต้ตอบ) หลังจากนั้นฉันยอมรับว่าping
"kludge" อาจเป็นตัวเลือกที่ดีที่สุดถัดไปเนื่องจากง่ายมาก ที่กล่าวว่าฉันมีตัวเลือกอื่น ... ฝังบางสคริปต์ VB
พื้นฐานของโซลูชันนี้มีแอปพลิเคชันทุกประเภทที่นอกเหนือจากนี้ บ่อยครั้งที่ VBS สามารถทำสิ่งต่าง ๆ ที่ชุดไม่สามารถหรืออย่างน้อยที่สุดก็ทำได้อย่างง่ายดายมากขึ้น เมื่อใช้เทคนิคที่แสดงไว้ที่นี่คุณสามารถผสมสองอย่าง (ไม่ใช่ "ต่อเนื่อง" แต่ "ทำงานได้" ... )
ต่อไปนี้เป็นขั้นตอนเดียวในการสร้างสคริปต์ชั่วคราวดำเนินการแล้วลบออก สคริปต์ทำการสลีปให้คุณ (เป็นเวลา 3 วินาทีในตัวอย่างนี้)
echo WScript.Sleep 3000 > %temp%\sleep.vbs & cscript %temp%\sleep.vbs %sleepMs% //B & del %temp%\sleep.vbs
นี่คือสิ่งเดียวกันโดยทั่วไปเขียนแตกต่างกันเล็กน้อย:
set sleepMs=3000 & set sleepVbs=%temp%\sleep.vbs & echo WScript.Sleep WScript.Arguments(0) > %sleepVbs% & cscript %sleepVbs% %sleepMs% //B & del %sleepVbs%
และแล้วในที่สุดเช่นping
, CScript
ตัวเองมีตัวเลือกหมดเวลา! ดังนั้นหากคุณป้อนการวนซ้ำไม่ จำกัด ในสคริปต์คุณสามารถให้ล่ามบังคับใช้ระยะเวลา หมายเหตุนี่เป็นการดำเนินการ "ไม่ว่าง" ซึ่งกินซีพียูและดังนั้นฉันจึงไม่แนะนำเมื่อคุณสามารถใช้WScript.Sleep
โพรซีเดอร์ได้ แต่ฉันแสดงเป็นตัวเลือกแนวคิดเพื่อความสมบูรณ์:
set sleepSec=3 & set sleepVbs=%temp%\sleep.vbs & echo While True > %sleepVbs% & echo Wend >> %sleepVbs% & cscript %sleepVbs% //B //T:%sleepSec% & del %sleepVbs%