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

Posted

技术标签:

【中文标题】如何从批处理脚本中运行批处理脚本?【英文标题】:How do I run a batch script from within a batch script? 【发布时间】:2011-06-15 11:51:31 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

使用CALL

CALL nameOfOtherFile.bat

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

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

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

【讨论】:

【参考方案2】:

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

所以,假设你有一个文件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!

【讨论】:

【参考方案3】:

你应该使用 CALL

CALL batch.bat

【讨论】:

【参考方案4】:

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

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

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

【讨论】:

有没有办法将这些脚本中的所有错误通过管道传回主脚本的输出?【参考方案5】:

你可以使用

call script.bat

或者只是

script.bat

【讨论】:

如果你在脚本中直接调用另一个脚本,如果被调用脚本中的任何命令返回非零值(错误),被调用脚本也会停止执行,这里使用@987654323 @,即使调用的脚本出错,它也会继续执行。【参考方案6】:

示例如下:

你有一个.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"

【讨论】:

【参考方案7】:

更好地运行两个批处理文件

       start Call "batch_file_name.bat"

如果你只是说

       start"batch_file_name.bat"

有时它只打开一个“cmd 窗口”,只是提示,你会看到代码是 没有被执行。

【讨论】:

【参考方案8】:

嗯,我不知道为什么,但是调用没有成功call script.bat 没有返回原来的控制台。cmd /k script.bat 确实返回了原来的控制台。

【讨论】:

考虑编辑您的问题,以更正式地解释哪些无效和哪些有效,包括无效代码和有效代码 对页面上唯一可行的解​​决方案的天真评论......除了“没有返回原始控制台”之外还有什么要解释的......所以, cmd/k 对我有用,同样,在我用其他“解决方案”浪费时间之后

以上是关于如何从批处理脚本中运行批处理脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何将多个变量从 VBS 传递到批处理脚本?

如何从 python 脚本在新窗口上打开批处理

从批处理文件运行python脚本时,如何自动将输入值传递给python“输入”函数

从批处理文件运行 Powershell 脚本中的参数

如何在脚本中获取进程ID

python 作为“批处理”脚本(即从 python 运行命令)