ฉันจะทำให้ไฟล์. bat ดำเนินการต่อหลังจากเกิดข้อผิดพลาดได้อย่างไร


30

ฉันมีไฟล์. bat ใน windows ที่ทำสามสิ่ง

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

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

อัปเดตเพื่อความชัดเจน - ไฟล์เหล่านี้ไม่ใช่ไฟล์. bat อื่น ๆ เป็นคำสั่ง exe หวังว่าฉันไม่จำเป็นต้องสร้างแผนภูมิของไฟล์. bat เพียงเพื่อให้ได้สิ่งนี้


cmd /Cคุณควรจะสามารถที่จะเริ่มต้นคำสั่งโดยใช้
Der Hochstapler

1
คุณต้องแสดงตัวอย่างรหัสเฉพาะของสิ่งที่ไม่ทำงาน โดยทั่วไปไฟล์แบตช์จะไม่ยุติโดยอัตโนมัติหากคำสั่งล้มเหลวพร้อมข้อผิดพลาด ไฟล์แบทช์จะยุติหากมีข้อผิดพลาดทางไวยากรณ์ หากรหัสของคุณกำลังออกจากข้อผิดพลาด exe จะต้องมีตรรกะในรหัสของคุณที่ทำให้เกิดพฤติกรรมนั้น
dbenham

คำตอบ:


18

อีกทางเลือกหนึ่งคือการใช้เครื่องหมาย ( &)

cmd1 & cmd2 & cmd3

หากคุณใช้ double จะดำเนินการต่อเมื่อคำสั่งก่อนหน้านี้เสร็จสมบูรณ์แล้วเท่านั้น ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

หากคุณใช้ท่อคู่ ( ||) มันจะเรียกใช้คำสั่งต่อไปเฉพาะถ้าก่อนหน้านี้เสร็จสมบูรณ์ด้วยรหัสข้อผิดพลาด ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3


ฉันสามารถทำสิ่งนี้เมื่อผ่าน args ยัง? ฉันลองแล้วไม่เห็นว่าจะทำงาน
ConfusedNoob

@ConfusedNoob ฉันทำตลอดเวลา ... ฉันมีCHKDSKคำสั่งพร้อมอาร์กิวเมนต์ที่ใช้งานได้ ฉันพิมพ์check D: & check E: & check F:และใช้งานได้ อาร์กิวเมนต์ที่ไฟล์ BAT มี/perf /f /r /b /scanสวิทช์
Canadian Luke REINSTATE MONICA

2
สิ่งที่ดี! ทำให้ฉันมีความคิดเกี่ยวกับวิธีการลองหลายครั้ง: cmd || cmd || ... จะดำเนินการคำสั่งถัดไปจนกว่าจะประสบความสำเร็จ
iTake

1
สิ่งนี้ทำให้สคริปต์ที่อ่านไม่ได้ยาวไม่มีทางอื่นหรือ
ม.ค.

1
@CanadianLuke ชุดดีเป็นกรอบแบทช์ของ Windows คุณรันคำสั่งหลายร้อยคำสั่งที่ไม่โต้ตอบได้อย่างไร? มีวิธีที่ดีกว่าใน power shell หรือไม่? มันแย่กว่าที่จะย้ายไปที่นั่นไหม?
ม.ค.

11

การสันนิษฐาน cmds เป็นไฟล์. bat อื่น ๆ ที่ซ้อนคำสั่งดังนี้:

 call cmd1
 call cmd2
 call cmd3

10

สิ่งนี้ใช้ได้กับฉัน:

cmd.exe /c cmd1 arg1
cmd2
...

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

cmd2ดำเนินการแม้ว่าคำสั่งแรกล้มเหลว ดูcmd /?จากพรอมต์คำสั่งของ Windows สำหรับข้อมูลเพิ่มเติม

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