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

Command line 如何从批处理脚本中运行批处理脚本?,command-line,batch-file,cmd,Command Line,Batch File,Cmd,如何从批处理脚本中调用另一个批处理脚本 我希望它在if语句中执行。您可以使用 call script.bat 或者只是 script.bat 你应该使用CALL CALL batch.bat 使用调用,如中所示 CALL nameOfOtherFile.bat 这将阻止(暂停)当前批处理文件的执行,并将等待调用完成 如果不想让它阻塞,请改用START 使用cmd提示符下的CALL/?或START/?获取详细信息。以下是示例: 你有一只蝙蝠: @echo off if exist b.ba

如何从批处理脚本中调用另一个批处理脚本

我希望它在
if
语句中执行。

您可以使用

call script.bat
或者只是

script.bat
你应该使用CALL

CALL batch.bat

使用
调用
,如中所示

CALL nameOfOtherFile.bat
这将阻止(暂停)当前批处理文件的执行,并将等待
调用完成

如果不想让它阻塞,请改用
START

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

以下是示例:

你有一只蝙蝠:

@echo off
if exist b.bat goto RUNB
goto END
:RUNB
b.bat
:END
从a.bat有条件地调用b.bat:

@echo off 
echo "This is b.bat"

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

因此,假设您有一个文件
bar.bat
,上面写着
echo这是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!

嗯,我不知道为什么,但是call没有做到这一点
调用脚本.bat
未返回到原始控制台。

cmd/k script.bat
确实返回了原始控制台。

如果希望在另一个窗口中打开批处理文件,请使用
start
。这样,基本上可以同时运行两个脚本。换句话说,您不必等待刚刚调用的脚本完成。 以下所有示例均有效:

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

如果要等待脚本完成,请尝试
start/w call batch.bat
,但batch.bat必须以
exit

结束如果直接调用脚本中的另一个脚本,如果被调用脚本中的任何命令返回非零值(错误),则被调用脚本也将停止执行,在使用<代码>调用< /代码>的情况下,即使在调用脚本中出错,它也将继续执行。考虑编辑您的问题,以更正式地解释什么不起作用,以及什么,包括非工作代码和工作代码有办法将每个脚本中的所有错误都归还到主脚本的输出吗?