如何从批处理脚本中运行批处理脚本?
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
这将阻止(暂停)当前批处理文件的执行,并等待CALL
ed 完成。
如果您不想阻止它,请改用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 对我有用,同样,在我用其他“解决方案”浪费时间之后以上是关于如何从批处理脚本中运行批处理脚本?的主要内容,如果未能解决你的问题,请参考以下文章