Làm cách nào để chạy tập lệnh loạt từ bên trong tập lệnh hàng loạt?


97

Làm cách nào để gọi một tập lệnh loạt khác từ trong một tập lệnh loạt?

Tôi muốn nó thực thi trong một ifcâu lệnh.

Câu trả lời:


219

Sử dụng CALLnhư trong

CALL nameOfOtherFile.bat

Thao tác này sẽ chặn (tạm dừng) việc thực thi tệp lô hiện tại và nó sẽ đợi cho đến khi CALLchỉnh sửa hoàn tất.

Nếu bạn không muốn nó chặn, hãy sử dụng STARTthay thế.

Nhận chi tiết nitty-gritty bằng cách sử dụng CALL /?hoặc START /?từ dấu nhắc cmd.


22

Bạn chỉ có thể gọi tập lệnh lô theo tên, như thể bạn đang chạy trên dòng lệnh.

Vì vậy, giả sử bạn có một tệp bar.batcho biết echo This is bar.bat!và bạn muốn gọi nó từ một tệp foo.bat, bạn có thể viết điều này trong foo.bat:

if "%1"=="blah" bar

Chạy foo blahtừ dòng lệnh và bạn sẽ thấy:

C:\>foo blah

C:\>if "blah" == "blah" bar

C:\>echo This is bar.bat!
This is bar.bat!

Nhưng hãy cẩn thận : Khi bạn gọi một tập lệnh lô từ một tập lệnh loạt khác, tập lệnh loạt ban đầu sẽ ngừng chạy. Nếu bạn muốn chạy tập lệnh lô thứ cấp và sau đó quay lại tập lệnh lô trước đó, bạn sẽ phải sử dụng calllệnh. Ví dụ:

if "%1"=="blah" call bar
echo That's all for foo.bat!

Nếu bạn chạy foo blahtrên đó, bạn sẽ thấy:

C:\>foo blah

C:\>if "blah" == "blah" call bar

C:\>echo This is bar.bat!
This is bar.bat!

C:\>echo That's all for foo.bat!
That's all for foo.bat!


2

Bạn có thể dùng

call script.bat

hay chỉ

script.bat

5
Nếu bạn trực tiếp gọi một tập lệnh khác trong tập lệnh của mình, trong trường hợp bất kỳ lệnh nào trong tập lệnh được gọi trả về giá trị khác 0 (lỗi), tập lệnh callee cũng sẽ dừng thực thi, khi sử dụng call, tập lệnh sẽ tiếp tục thực thi ngay cả khi có lỗi trong tập lệnh được gọi.
Bruno Finger

1

Đây là ví dụ:

Bạn có a.bat:

@echo off
if exist b.bat goto RUNB
goto END
:RUNB
b.bat
:END

và b.bat được gọi có điều kiện từ a.bat:

@echo off 
echo "This is b.bat"

1

Nếu bạn muốn mở tệp loạt trong một cửa sổ khác, hãy sử dụng start. Bằng cách này, về cơ bản bạn có thể chạy hai tập lệnh cùng một lúc. Nói cách khác, bạn không phải đợi tập lệnh bạn vừa gọi kết thúc. Tất cả các ví dụ dưới đây đều hoạt động:

start batch.bat
start call batch.bat
start cmd /c batch.bat

Nếu bạn muốn đợi tập lệnh kết thúc, hãy thử start /w call batch.bat, nhưng batch.bat phải kết thúc bằng exit.


Có cách nào để chuyển tất cả các lỗi từ mỗi tập lệnh này trở lại đầu ra của tập lệnh chính không?
gunlingor

0

Chạy song song trên các cửa sổ lệnh riêng biệt ở trạng thái thu nhỏ

dayStart.bat

start "startOfficialSoftwares" /min cmd /k call startOfficialSoftwares.bat
start "initCodingEnvironment" /min cmd /k call initCodingEnvironment.bat
start "updateProjectSource" /min cmd /k call updateProjectSource.bat
start "runCoffeeMachine" /min cmd /k call runCoffeeMachine.bat

Chạy tuần tự trên cùng một cửa sổ

release.bat

call updateDevelVersion.bat
call mergeDevelIntoMaster.bat
call publishProject.bat

-3

huh, tôi không biết tại sao, nhưng cuộc gọi không thực hiện được thủ thuật
call script.batkhông quay lại bảng điều khiển ban đầu.
cmd /k script.batđã quay trở lại bảng điều khiển ban đầu.


2
Xem xét chỉnh sửa câu hỏi của bạn để chính thức nhiều hơn giải thích những gì đã không làm việc và những gì đã làm, bao gồm cả mã không làm việc và mã làm việc
wundermahn
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.