Tất cả các câu trả lời khác là chính xác: sử dụng cuộc gọi. Ví dụ:
call "msbuild.bat"
Lịch sử
Trong các phiên bản DOS cổ, không thể thực hiện đệ quy các tệp bó. Sau đó, lệnh gọi được giới thiệu đã gọi shell cmd khác để thực thi tệp bó và trả lại thực thi trở lại shell cmd khi gọi xong.
Rõ ràng trong các phiên bản sau, không còn vỏ cmd nào nữa.
Trong những ngày đầu, nhiều tệp bó phụ thuộc vào thực tế là việc gọi tệp bó sẽ không trở lại tệp bó gọi. Thay đổi hành vi mà không có cú pháp bổ sung sẽ phá vỡ nhiều hệ thống như hệ thống menu bó (sử dụng tệp bó cho cấu trúc menu).
Như trong nhiều trường hợp với Microsoft, do đó khả năng tương thích ngược là lý do cho hành vi này.
Lời khuyên
Nếu các tệp bó của bạn có khoảng trắng trong tên của chúng, hãy sử dụng dấu ngoặc kép quanh tên:
call "unit tests.bat"
Nhân tiện: nếu bạn không có tất cả tên của các tệp bó, bạn cũng có thể sử dụng để thực hiện việc này (nó không đảm bảo đúng thứ tự các lệnh gọi tệp bó; nó tuân theo thứ tự của hệ thống tệp):
FOR %x IN (*.bat) DO call "%x"
Bạn cũng có thể phản ứng với các lỗi sau khi gọi. Sử dụng:
exit /B 1 # Or any other integer value in 0..255
để trả lại một lỗi. 0 biểu thị thực hiện đúng. Trong tệp bó cuộc gọi, bạn có thể phản ứng bằng cách sử dụng
if errorlevel neq 0 <batch command>
Sử dụng if errorlevel 1
nếu bạn có Windows cũ hơn NT4 / 2000 / XP để bắt tất cả các lỗi 1 và cao hơn.
Để kiểm soát luồng của tệp bó, có goto :-(
if errorlevel 2 goto label2
if errorlevel 1 goto label1
...
:label1
...
:label2
...
Như những người khác đã chỉ ra: hãy xem các hệ thống xây dựng để thay thế các tệp bó.