พูดถ้าฉันมี
- foo.exe
- bar.exe
- baz.exe
ฉันจะเรียกใช้ทั้งหมดจากแฟ้มแบตช์แบบอะซิงโครนัสได้อย่างไรโดยไม่ต้องรอให้โปรแกรมก่อนหน้าหยุดทำงาน
พูดถ้าฉันมี
ฉันจะเรียกใช้ทั้งหมดจากแฟ้มแบตช์แบบอะซิงโครนัสได้อย่างไรโดยไม่ต้องรอให้โปรแกรมก่อนหน้าหยุดทำงาน
คำตอบ:
การใช้START
คำสั่งเพื่อรันแต่ละโปรแกรมควรจะได้รับสิ่งที่คุณต้องการ:
START "title" [/D path] [options] "command" [parameters]
การSTART
เรียกใช้ทุกครั้งจะรันคำสั่งที่กำหนดในพารามิเตอร์และส่งคืนทันทียกเว้นว่ามีการดำเนินการด้วย/WAIT
สวิตช์
ที่ใช้กับแอพบรรทัดคำสั่ง START
ปพลิเคชันโดยไม่ต้องกลับมาบรรทัดคำสั่งได้ทันทีอยู่แล้วดังนั้นเพื่อให้แน่ใจว่าถ้าคุณต้องการที่จะทำงานทุกแบบไม่พร้อมใช้งาน
คุณสามารถลองรวมคำตอบก่อนหน้าสองสามข้อเข้าstart /b cmd /c foo.exe
ด้วยกัน
สำหรับตัวอย่างเล็ก ๆ น้อย ๆ หากคุณต้องการพิมพ์รุ่นของ java / groovy / grails / gradle คุณสามารถทำได้ในไฟล์แบทช์:
@start /b cmd /c java -version
@start /b cmd /c gradle -version
@start /b cmd /c groovy -version
@start /b cmd /c grails -version
หากคุณมีบางอย่างเช่น Process Explorer (Sysinternals) คุณจะเห็นเด็กสองสามคนประมวลผล cmd.exe แต่ละกระบวนการด้วยกระบวนการ java (ตามคำสั่งข้างต้น) ผลลัพธ์จะพิมพ์ไปที่หน้าจอตามลำดับที่พวกเขาจะเสร็จสิ้น
start /b : Start application without creating a new window. The
application has ^C handling ignored. Unless the application
enables ^C processing, ^Break is the only way to interrupt
the application
cmd /c : Carries out the command specified by string and then terminates
echo off
จุดเริ่มต้นซึ่งเมื่อคุณรันสคริปต์จะป้องกันไม่ให้คำสั่งทั้งหมดถูกสะท้อนไปยังคอนโซล @
คล้ายกัน แต่เพียงว่าคำสั่งเดียว @echo off
ดังนั้นบางครั้งคุณจะเห็น
คุณสามารถใช้คำสั่งเริ่มต้นเพื่อวางไข่กระบวนการพื้นหลังโดยไม่ต้องเปิดหน้าต่างใหม่:
start /b foo.exe
กระบวนการใหม่จะไม่ถูกขัดจังหวะด้วย CTRL-C; คุณสามารถฆ่ามันได้ด้วย CTRL-BREAK เท่านั้น (หรือโดยการปิดหน้าต่างหรือผ่านตัวจัดการงาน)
BREAK
วันนี้คีย์บอร์ดอยู่ที่ไหน
สร้างแบตช์ไฟล์ด้วยบรรทัดต่อไปนี้:
start foo.exe
start bar.exe
start baz.exe
คำสั่งเริ่มต้นทำงานคำสั่งของคุณในหน้าต่างใหม่เพื่อให้ทั้ง 3 คำสั่งที่จะทำงานแบบไม่พร้อมกัน
ใช้คำสั่ง START :
start [programPath]
หากเส้นทางไปยังโปรแกรมมีช่องว่างอย่าลืมเพิ่มเครื่องหมายคำพูด ในกรณีนี้คุณต้องระบุหัวเรื่องสำหรับหน้าต่างคอนโซลเปิด
start "[title]" "[program path]"
หากคุณจำเป็นต้องระบุอาร์กิวเมนต์ต่อท้ายพวกเขา (นอกเครื่องหมายคำสั่ง)
start "[title]" "[program path]" [list of command args]
ใช้ตัวเลือก / b เพื่อหลีกเลี่ยงการเปิดหน้าต่างคอนโซลใหม่ (แต่ในกรณีนั้นคุณไม่สามารถขัดจังหวะแอปพลิเคชันโดยใช้ CTRL-C
มีตัวเลือกที่สาม (และอาจง่ายกว่ามาก) หากคุณต้องการหมุนหลายอินสแตนซ์ของโปรแกรมเดียวการใช้ตัวประมวลผลคำสั่ง Unix แบบ Xargs หรือ GNU Parallel สามารถทำให้กระบวนการนั้นค่อนข้างตรงไปตรงมา
มี win32 Xargs clone ที่ชื่อว่าPPX2ซึ่งทำให้ตรงไปตรงมา
ตัวอย่างเช่นหากคุณต้องการแปลงรหัสของไฟล์วิดีโอคุณสามารถเรียกใช้คำสั่ง:
dir /b *.mpg |ppx2 -P 4 -I {} -L 1 ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
การเลือกสิ่งนี้แยกdir /b *.mpg
รายการของไฟล์. mpg ในไดเรกทอรีปัจจุบันของฉันผู้|
ดำเนินการไพพ์รายการนี้เป็น ppx2 ซึ่งจะสร้างชุดคำสั่งที่จะดำเนินการแบบขนาน 4 ต่อครั้งตามที่ระบุไว้ที่นี่โดย-P 4
ผู้ประกอบการ -L 1
ผู้ประกอบการบอก ppx2 เพียงส่งหนึ่งบรรทัดของไดเรกทอรีของเรารายชื่อเพื่อ ffmpeg ในเวลา
หลังจากนั้นคุณเพียงแค่เขียนบรรทัดคำสั่ง ( ffmpeg.exe -i "{}" -quality:v 1 "{}.mp4"
) ของคุณและ{}
จะถูกแทนที่โดยอัตโนมัติสำหรับแต่ละบรรทัดของรายการไดเรกทอรีของคุณ
ไม่สามารถใช้ได้กับทุกกรณี แต่จะง่ายกว่าการใช้ชุดการแก้ไขแฟ้มรายละเอียดด้านบน แน่นอนถ้าคุณไม่ได้จัดการกับรายการไฟล์คุณสามารถไปที่เนื้อหาของ textfile หรือโปรแกรมอื่น ๆ ในอินพุตของ pxx2
ฉันไม่สามารถทำงานอะไรได้ฉันลงเอยด้วยการใช้ powershell เพื่อเริ่มสคริปต์ bat .. บางครั้งก็เริ่ม cmd / c ไม่แน่ใจว่าทำไม .. ฉันยังลองสิ่งต่างๆเช่น start cmd / c notepad & exit
start-Process "c:\BACKUP\PRIVATE\MobaXterm_Portable\MobaXterm_Portable.bat" -WindowStyle Hidden
help
อย่างระมัดระวัง :)