Làm cách nào để tạo tệp .bat của tôi tiếp tục sau khi xảy ra lỗi


30

Tôi có một tập tin .bat trong windows có ba thứ

cmd1 arg1 arg2
cmd2 arg3 
cmd3 arg4 arg5 arg6

Đôi khi cmd1 có thể thất bại và điều đó tốt, tôi muốn tiếp tục và thực hiện cmd2 và cmd3. Nhưng con dơi của tôi dừng lại ở cmd1. Làm thế nào tôi có thể tránh điều này?

Cập nhật cho rõ ràng - đây không phải là các tệp .bat khác, chúng là các lệnh exe. Hy vọng rằng tôi không phải xây dựng một tập tin .bat chỉ để đạt được điều này.


Bạn sẽ có thể bắt đầu lệnh bằng cách sử dụng cmd /C.
Der Hochstapler

1
Bạn cần đưa ra một ví dụ mã cụ thể về những gì không hoạt động. Các tệp hàng loạt thường không tự động chấm dứt nếu một lệnh bị lỗi. Các tệp hàng loạt sẽ chấm dứt nếu có lỗi cú pháp. Nếu mã của bạn đang thoát do lỗi exe, thì phải có logic trong mã của bạn gây ra hành vi đó.
dbenham

Câu trả lời:


18

Một tùy chọn khác là sử dụng amperstand ( &)

cmd1 & cmd2 & cmd3

Nếu bạn sử dụng gấp đôi, nó chỉ tiếp tục nếu lệnh trước hoàn thành thành công ( %ERRORLEVEL%==0)

cmd1 && cmd2 && cmd3

Nếu bạn sử dụng ống đôi ( ||), nó chỉ chạy lệnh tiếp theo nếu trước đó hoàn thành với mã lỗi ( %ERRORLEVEL% NEQ 0)

cmd1 || cmd2 || cmd3


Tôi có thể làm điều này khi vượt qua args không? Tôi chỉ thử và nó không hoạt động.
Bối rốiNoob

@ConfuseNoob Tôi làm mọi lúc ... Tôi có một CHKDSKlệnh, với các đối số, nó hoạt động. Tôi gõ check D: & check E: & check F:, và nó hoạt động. Các đối số mà tệp BAT đã bao gồm các /perf /f /r /b /scancông tắc
Luke Luke REINSTATE MONICA của Canada

2
tốt một mang đến cho tôi một ý tưởng làm thế nào để thực hiện một số lần thử lại: cmd || cmd | | ... sẽ thực hiện cmd tiếp theo cho đến khi thành công
iTake

1
Điều này làm cho các kịch bản dài không thể đọc được, có cách nào khác không?
Tháng Một

1
@CanadianLuke Lô tốt là khung lô windows. Làm thế nào để bạn chạy hàng trăm lệnh không tương tác? Có một cách tiếp cận tốt hơn trong vỏ điện? Điều đó có tệ hơn khi di chuyển đến đó không?
Tháng Một

11

Đặt trước các cmds là các tệp .bat khác xếp các lệnh như thế này:

 call cmd1
 call cmd2
 call cmd3

10

Điều này làm việc cho tôi:

cmd.exe /c cmd1 arg1
cmd2
...

Điều này sử dụng cmd.exeđể thực thi lệnh trong một phiên bản mới của trình thông dịch lệnh Windows, do đó, một lệnh thất bại không làm gián đoạn tập lệnh bó. Các /clá cờ nói với người phiên dịch để chấm dứt ngay sau khi kết thúc lệnh thực hiện.

cmd2thực thi ngay cả khi lệnh đầu tiên thất bại. Xem cmd /?từ Windows Command Prompt để biết thêm thông tin.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.