bash“ รอ” ทางเลือกสำหรับสคริปต์ชุดของ Windows


1

ในทุบตีมีตัวเลือกที่จะรอให้กระบวนการพื้นหลังทั้งหมดเริ่มต้นโดยเชลล์ปัจจุบันโดยใช้waitคำสั่ง

เช่น

#!/bin/bash
{ sleep 5; echo "waking up after 5 seconds"; } &
{ sleep 1; echo "waking up after 1 second"; } &
wait
echo all jobs are done!

ฉันจะทำเช่นเดียวกันในสคริปต์แบทช์ของ Windows ได้อย่างไร ฉันต้องเรียกใช้หลายคำสั่งในพื้นหลังและรอจนกว่าจะเสร็จสิ้นทั้งหมด


ไม่มีวิธีง่ายๆในการทำเช่นนี้ใน cmd ที่ฉันรู้ (ถ้าคุณต้องการทำงานของคุณในแบบคู่ขนาน) แต่ถ้าคุณสามารถใช้ Powershell จะมีชื่อเทียบเท่าwait-job( technet.microsoft.com/en-us/library/Hh849735 .aspx )
wmz

ไม่อนุญาตให้ใช้ Powershell :(
Hemant

เพิ่งออกมาจากความอยากรู้อะไรคือเหตุผลที่อยู่เบื้องหลังว่า [PS ไม่ได้รับอนุญาต]?
wmz

คำตอบ:


3

คุณอาจต้องการให้คำสั่ง START เริ่มต้นการประมวลผลแบบขนานแม้ว่าสามารถทำได้ผ่าน WMIC โปรดทราบว่าอาร์กิวเมนต์แรกจะถือเป็นชื่อหน้าต่างหากมีการเสนอราคา นั่นคือเหตุผลที่อาร์กิวเมนต์แรกของฉันคือสตริงว่าง /Bตัวเลือกรันคำสั่งในหน้าต่างเดียวกัน ลบออกหากคุณต้องการหน้าต่างใหม่สำหรับแต่ละคำสั่ง

ไม่มีคำสั่งแบตช์ดั้งเดิมที่เรียบง่ายหรือตัวเลือกเพื่อรอชุดของกระบวนการแบบขนานให้เสร็จ

ฉันชอบที่จะเปลี่ยนเส้นทางการจัดการไฟล์ที่ไม่ได้ใช้ไปยังไฟล์สำหรับแต่ละกระบวนการดังนั้นการสร้างล็อคพิเศษ ฉันสามารถตรวจพบว่ากระบวนการยังคงทำงานอยู่โดยพยายามเปลี่ยนเส้นทาง(CALL )(ให้มีผลบังคับใช้เป็น null) ไปยังไฟล์ล็อคเดียวกัน หากการเปลี่ยนเส้นทางล้มเหลวแสดงว่ากระบวนการยังคงทำงานอยู่ สำเร็จแสดงว่ากระบวนการได้สิ้นสุดลงแล้ว

การทดสอบจะต้องทำกับไฟล์ล็อคแต่ละไฟล์ในการวนซ้ำโพล การเพิ่มความล่าช้าเป็นความคิดที่ดีในการป้องกันการวนซ้ำจากการใช้ทรัพยากรในทางที่ผิด

@echo off
set "lock=%temp%\%~nx0.lock"
start "" /b "timeout" 5 9>"%lock%.1"
start "" /b "timeout" 8 9>"%lock%.2"
:wait
timeout 1 /nobreak >nul
2>nul (for %%F in ("%lock%.*") do 9>"%%F" (call ) && del "%%F" || goto :wait)
echo OK

หากคุณมีกระบวนการแบบขนานจำนวนมากที่ต้องการเรียกใช้และคุณต้องการ จำกัด จำนวนกระบวนการพร้อมกันคุณอาจสนใจhttps://stackoverflow.com/a/11715437/1012053

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.