2011-08-05 34 views
5

Tôi có hai dòng lệnh gọi trong tập tin batch như thế này:Làm thế nào để viết lệnh gọi trong tập tin batch có điều kiện?

call execute.cmd 
call launch.cmd 

nhu cầu của tôi là để gọi launch.cmd khi và chỉ khi cuộc gọi đến execute.cmd thành công. Vì vậy, có cách nào mà tôi có thể đặt một số điều kiện ở đây?

execute.cmd không trả lại bất kỳ giá trị nào tại đây.

Trả lời

5

Nếu execute.cmd lợi nhuận một số nguyên hơn bạn có thể sử dụng một IF command để kiểm tra xem nó là giá trị trả về và nếu nó phù hợp với một mong muốn hơn bạn có thể gọi launch.cmd

Giả sử rằng execute.cmd trả về 0 nếu nó là thành công hay một số nguyên> = 1 nếu không. Lô sẽ trông như sau:

rem call the execute command 
call execute.cmd 
rem check the return value (referred here as errorlevel) 
if %ERRORLEVEL% ==1 GOTO noexecute 
rem call the launch command 
call launch.cmd 

:noexecute 
rem since we got here, launch is no longer going to be executed 

lưu ý rằng lệnh rem được sử dụng cho nhận xét.

HTH,
JP

+0

exceute.cmd trả về 0 nếu thành công và 1 nếu không, do đó, sự cố đã được giải quyết bằng cách sử dụng logic của bạn, cảm ơn rất nhiều. Như bạn đã trả lời trước, tôi chấp nhận câu trả lời của bạn, mặc dù câu trả lời của @jhclark có vẻ chính xác. – Anand

+0

@Anand K Gupta wellcome của bạn :) –

+0

Bạn cũng có thể đạt được điều tương tự với Windows Batch && kết hợp theo cách này: gọi execute.cmd && call launch.cmd – Aacini

3

Tôi tin rằng đây là một bản sao của How do I make a batch file terminate upon encountering an error?.

giải pháp của bạn ở đây sẽ là:

call execute.cmd 
if %errorlevel% neq 0 exit /b %errorlevel% 
call launch.cmd 
if %errorlevel% neq 0 exit /b %errorlevel% 

Thật không may, có vẻ như các tập tin batch của Windows không có tương đương với UNIX bash của set -eset -o pipefail. Nếu bạn sẵn sàng từ bỏ ngôn ngữ tệp lô hàng rất hạn chế, bạn có thể dùng thử Windows PowerShell.

+0

Cảm ơn bạn, bạn cũng vậy .. – Anand

Các vấn đề liên quan