ฉันจะเรียกใช้สคริปต์ชุดงานจากภายในสคริปต์ชุดงานได้อย่างไร


99

ฉันจะเรียกสคริปต์ชุดงานอื่นจากภายในสคริปต์ชุดงานได้อย่างไร

ฉันต้องการให้ดำเนินการในifคำสั่ง

คำตอบ:


227

ใช้CALLเป็น

CALL nameOfOtherFile.bat

การดำเนินการนี้จะบล็อก (หยุดชั่วคราว) การทำงานของไฟล์แบตช์ปัจจุบันและจะรอจนกว่าการCALLแก้ไขจะเสร็จสิ้น

หากคุณไม่ต้องการให้บล็อกให้ใช้STARTแทน

รับรายละเอียดที่น่าสนใจโดยใช้CALL /?หรือSTART /?จากพรอมต์ cmd


23

คุณสามารถเรียกใช้สคริปต์แบตช์ตามชื่อได้ราวกับว่าคุณกำลังรันบนบรรทัดคำสั่ง

ดังนั้นสมมติว่าคุณมีไฟล์bar.batที่ระบุecho This is bar.bat!และต้องการเรียกใช้จากไฟล์foo.batคุณสามารถเขียนสิ่งนี้ในfoo.bat:

if "%1"=="blah" bar

เรียกใช้foo blahจากบรรทัดคำสั่งแล้วคุณจะเห็น:

C:\>foo blah

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

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

แต่ระวัง : เมื่อคุณเรียกใช้สคริปต์ชุดงานจากสคริปต์ชุดงานอื่นสคริปต์ชุดงานดั้งเดิมจะหยุดทำงาน หากคุณต้องการรันสคริปต์แบตช์รองแล้วกลับไปที่สคริปต์แบตช์ก่อนหน้าคุณจะต้องใช้callคำสั่ง ตัวอย่างเช่น:

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

หากคุณดำเนินการfoo blahดังกล่าวคุณจะเห็น:

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

คุณสามารถใช้ได้

call script.bat

หรือเพียงแค่

script.bat

5
หากคุณเรียกใช้สคริปต์อื่นภายในสคริปต์ของคุณโดยตรงในกรณีที่คำสั่งใด ๆ ในสคริปต์ที่เรียกว่าส่งกลับค่าที่ไม่ใช่ศูนย์ (ข้อผิดพลาด) สคริปต์ callee จะหยุดดำเนินการเช่นกันเมื่อใช้สคริปต์จะดำเนินการcallต่อแม้จะมีข้อผิดพลาด ในสคริปต์ที่เรียกว่า
Bruno Finger

1

นี่คือตัวอย่าง:

คุณมี a.bat:

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

และ b.bat เรียกเงื่อนไขจาก a.bat:

@echo off 
echo "This is b.bat"

1

หากคุณต้องการเปิดไฟล์แบตช์ในหน้าต่างอื่นให้ใช้start. ด้วยวิธีนี้คุณสามารถเรียกใช้สองสคริปต์พร้อมกันได้ กล่าวอีกนัยหนึ่งคุณไม่จำเป็นต้องรอให้สคริปต์ที่คุณเพิ่งเรียกจนจบ ตัวอย่างทั้งหมดด้านล่างทำงาน:

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

หากคุณต้องการที่จะรอสคริปต์เพื่อให้เสร็จลองstart /w call batch.batแต่ batch.bat exitมีจบลงด้วยการ


มีวิธีไพพ์ข้อผิดพลาดทั้งหมดจากแต่ละสคริปต์เหล่านี้กลับไปที่เอาต์พุตของสคริปต์หลักหรือไม่
gunslingor

0

รันแบบขนานบนหน้าต่างคำสั่งที่แยกจากกันในสถานะย่อเล็กสุด

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

เรียกใช้ตามลำดับบนหน้าต่างเดียวกัน

release.bat

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

-3

ฉันไม่รู้ว่าทำไม แต่โทรไม่ได้ทำเคล็ดลับ
call script.batไม่ได้กลับไปที่คอนโซลเดิม
cmd /k script.batกลับไปที่คอนโซลเดิม


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