ไม่มีใครรู้ว่ามีสคริปต์ cmd ที่ทำเช่นนั้นและ / หรือเครื่องมือบรรทัดคำสั่งพร้อมสำหรับงานหรือไม่
ไม่มีใครรู้ว่ามีสคริปต์ cmd ที่ทำเช่นนั้นและ / หรือเครื่องมือบรรทัดคำสั่งพร้อมสำหรับงานหรือไม่
คำตอบ:
สร้างไฟล์แบตช์สามไฟล์ด้านล่าง Main.bat เปิดตัว 1.bat และ 2.bat
1.bat และ 2.bat เขียนไฟล์ชั่วคราวที่ main.bat ตรวจสอบ ขณะที่ 1.bat และ 2.bat ทำงานอยู่ main.bat รายงานกลับมาว่าการประมวลผลยังคงเกิดขึ้น เมื่อคุณกด Enter บนหน้าต่างที่เปิด 1.bat หรือ 2.bat ไฟล์ชั่วคราวจะถูกลบและโปรแกรมจะออก นี่เป็นการจำลองการประมวลผลการหยุดสำหรับไฟล์. bat นั้น หากคุณทำเช่นนี้ทั้ง 1 และ 2.bat, main.bat จะรายงานให้คุณทราบว่าการประมวลผลเสร็จสิ้นสำหรับกระบวนการเหล่านี้ คุณสามารถสร้าง 1.bat และ 2.bat ทำสิ่งที่คุณต้องการตราบใดที่คุณล้างไฟล์ชั่วคราวเมื่อคุณทำเสร็จ ณ จุดนี้ main.bat สามารถทำสิ่งที่คุณต้องการให้ทำเช่นกัน
1.bat
echo %time% > 1.tmp
pause
del 1.tmp
exit
2.bat
echo %time% > 2.tmp
pause
del 2.tmp
exit
main.bat
@echo off
start "1" 1.bat
start "2" 2.bat
@ping -n 1 127.0.0.1 > nul
:loop
@echo Processing......
if not exist *.tmp goto :next
@ping -n 5 127.0.0.1 > nul
goto loop
:next
@echo Done Processing!
ง่ายพอหากกระบวนการไม่ต้องการอินพุตหรือเอาต์พุตมาตรฐาน จากบรรทัดคำสั่งหรือในไฟล์แบตช์:
process1 | process2 | process3 | process4
สิ่งนี้จะเรียกใช้กระบวนการทั้งสี่พร้อมกันและจะไม่กลับจนกว่าพวกเขาจะออกทั้งหมด (ข้อยกเว้นที่เป็นไปได้: หากกระบวนการปิดเอาต์พุตมาตรฐานอย่างชัดเจนกระบวนการนั้นอาจถูกจัดการเหมือนกับว่าออกไปแล้ว แต่นั่นผิดปกติกระบวนการน้อยมากที่ทำเช่นนั้น)
ฉันไม่แน่ใจว่าคุณสามารถเปิดใช้งานกระบวนการพร้อมกันได้อย่างแน่นอน ฉันเคยลองมาแล้วสิบครั้ง
วิธีเดียวในการทำเช่นนี้คือเริ่มแยกไฟล์แบตช์ (ดูstart /?
) ที่รันงานแต่ละงานและเขียนไฟล์ข้อความเมื่อเสร็จสิ้น จากนั้นคุณตรวจสอบว่ามีการสร้างไฟล์ข้อความเป็นระยะ ๆ หรือไม่
คุณอาจดู cmdlet Powershell Start-Job ควรอนุญาตให้คุณทำเช่นนี้ เพิ่มเติมที่นี่ Powershell เป็นตัวเลือกที่ดีที่สุดของ Microsoft มันมีประสิทธิภาพมากกว่า cmd script และไม่ต้องกังวลเรื่องการลงทุนในเวลาของคุณ
หรือคุณสามารถใช้สิ่งนี้: http://www.out-web.net/?p=167
ฉันทำแล้วมันใช้งานได้ แต่บางครั้งมันเกิดขึ้นว่า PID ของกระบวนการที่เสร็จสิ้นนั้นถูกนำกลับมาใช้อีกครั้งโดยโพรเซสอื่นของ Windows ที่เพิ่งเริ่มทำงาน
ฉันกำลังมองหางานที่คล้ายกัน วัตถุประสงค์คือการรันหลายคำสั่งแบบขนานและแยกเอาต์พุต (stdout & error) ของกระบวนการแบบขนานทั้งหมด จากนั้นรอให้กระบวนการแบบขนานทั้งหมดเสร็จสิ้นและดำเนินการคำสั่งอื่น ต่อไปนี้เป็นตัวอย่างรหัสสำหรับไฟล์ BAT สามารถดำเนินการใน CMD:
(
start "" /B cmd /c ping localhost -n 6 ^>nul
timeout /t 5 /nobreak
start "" /B /D "C:\users\username\Desktop" cmd /c dir ^> dr.txt ^2^>^&^1
start "" /B cmd /c ping localhost -n 11 ^>nul
timeout /t 10 /nobreak
) | pause
Echo waited
timeout /t 12 /nobreak
คำสั่งทั้งหมดที่อยู่ภายใน()
จะถูกดำเนินการก่อนรอให้เสร็จสมบูรณ์จากนั้นสองบรรทัดสุดท้ายจะถูกดำเนินการ คำสั่งทั้งหมดที่เริ่มต้นด้วยstart
จะถูกดำเนินการพร้อมกัน
ลิงก์เหล่านี้มีประโยชน์: /programming//a/43762349/9689416และhttps://ss64.com/nt/start.html