如何从批处理脚本中运行批处理脚本?


Answers:


219

使用CALL

CALL nameOfOtherFile.bat

这将阻止(暂停)当前批处理文件的执行,并且将等到CALLed完成。

如果您不想阻止它,请改用它START

使用CALL /?START /?从cmd提示符下获取详细信息。


22

您可以按名称调用批处理脚本,就像在命令行上运行一样。

因此,假设您有一个文件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
如果您直接调用脚本中的另一个脚本,以防万一被调用脚本中的任何命令返回非零值(错误),被调用方脚本也会停止执行,在使用的情况下call,即使有错误,也会继续执行在被调用的脚本中。
布鲁诺·芬奇

1

这是示例:

您有一个.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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.