【发布时间】:2011-01-05 11:56:29
【问题描述】:
我有一个批处理文件,
bat1.bat
bat2.bat
但它在 bat1 结束时停止
有什么线索吗?
【问题讨论】:
标签: batch-file cmd
我有一个批处理文件,
bat1.bat
bat2.bat
但它在 bat1 结束时停止
有什么线索吗?
【问题讨论】:
标签: batch-file cmd
使用call:
call bat1.cmd
call bat2.cmd
默认情况下,当您从另一个控制器运行批处理文件时,控件不会传回给调用者。这就是为什么你需要使用call。
基本上,如果您有这样的批次:
@echo off
echo Foo
batch2.cmd
echo Bar
那么它只会输出
Foo
如果你这样写
@echo off
echo Foo
call batch2.cmd
echo Bar
但是,它会输出
Foo
Bar
因为在batch2 终止后,程序控制权被传递回您的原始批处理文件。
【讨论】:
如果 bat1.bat 异常停止(除了运行到最后,例如调用 exit)可能会发生这种情况,您可以通过使用新的 cmd.exe 运行每个 bat 文件来解决此问题:
start /b /wait bat1.bat
start /b /wait bat2.bat
如果你的 bat 文件中没有后续命令,你可以省略最后一个。
【讨论】:
start 有点过头了。并且您需要在子批次结束时额外添加一个 exit 来终止生成的 cmd 进程。否则你会在第一批运行后发现自己在一个新的控制台上。
为了一次运行多个 .exe 文件,首先您需要创建 .bat 文件,然后添加所有 .exe 文件,如下所示:
D:\Data\Feed.exe Books.xml
D:\Data\Feed.exe Mobile.xml
D:\Data\Feed.exe Clothes.xml
然后保存为 something.bat 然后用 cmd 运行它。
【讨论】:
要寻找的其他东西:
我有一个类似的问题,我正在使用call 命令调用多个批处理文件,但它没有将控制权传递回原始 .bat 文件。
我发现我在批处理文件的末尾有一个exit 命令,它关闭了 DOS 窗口,然后返回到原始的.bat 文件并在那里完成命令。
【讨论】:
如果要按顺序运行批处理文件,则必须在每个文件的末尾添加“start bat1.bat”。
【讨论】: