让 .bat 文件在运行命令后继续

问题描述 投票:0回答:6

我需要解决 Windows .bat 文件上这个看似非常简单的问题。过去 10 年我一直全职使用 Linux,所以对于 .bat 脚本我还处于相当陌生的领域。

我们有一些单元测试需要从此 .bat 文件运行,并且需要在测试运行后生成构建。

bat 文件本身非常简单,我想只是链接命令:

cls
echo "Running test suite - CRMSync"
echo 
echo 
REM from command: --static-backup
phpunit --bootstrap test/bootstrap_test.php --verbose --log-junit              
echo "Running  phploc for CRMSync"
phploc --count-tests --verbose > C:\CRMsync\testResults\phploc\index.html
echo "Executing phing"
phing

现在,很简单,除了 phpunit 命令之后什么都不执行。我该如何处理这个问题? 单元测试运行良好,但我怀疑它甚至可能在单元测试库中该进程被终止。有没有办法以某种方式分叉进程或让下面的其他命令运行?

一如既往地感谢SO'ers,非常感谢任何帮助。

batch-file
6个回答
25
投票

我制作的开发脚本也遇到了同样的问题。我尝试了所有给定的解决方案但没有成功。最后,我用 cmd /C 完成了。

从 Windows 文档中它将:

运行命令然后终止

例如,您可以按如下方式使用它:

cls
echo "Running test suite - CRMSync"
echo 
echo 
REM from command: --static-backup
cmd /C phpunit --bootstrap test/bootstrap_test.php --verbose --log-junit              
echo "Running  phploc for CRMSync"
cmd /C phploc --count-tests --verbose > C:\CRMsync\testResults\phploc\index.html
echo "Executing phing"
cmd /C phing

我希望你觉得这很有用。


16
投票

与 ujifgc 帖子类似,我在这些情况下使用“start /b ...”。 如果将对 phpunit 的调用封装在另一个批处理文件中,则可以使用“call”。


8
投票

phpunit本身是一个批处理文件吗(我不太懂PHP,所以对这个工具不熟悉)?如果是这样,请尝试使用:

call phpunit --bootstrap test/bootstrap_test.php --verbose --log-junit

3
投票

我用过

开始/b代码.

cmd /k ng 服务 --build-optimizer --aot

启动 Visual Studio Code,然后启动 Node js 服务器。

但是命令行出现了%更新文本等故障。

然后我用了

cmd /C 代码.

cmd /k ng 服务 --build-optimizer --aot

服务器进度更新时故障已停止。


2
投票

尝试

start /WAIT phpunit ...
分叉进程并等待,或者只是
start phpunit ...
分叉并继续。帮助在这里:
start /?


0
投票

在搜索自动扣环的类似问题时发现了这一点。 简单的脚本

cd main
clasp pull
echo after pull
cd ..

不会回显并返回到原始文件夹,而此解决方案确实有效

cd main
cmd /c clasp pull
echo after pull
cd ..

这里的原因很简单:在 Windows 中,如果您从批处理文件内部运行批处理文件,则执行会在子批处理中继续,但不会返回到父后文件。

这里棘手的事情是,clasp(在我的例子中)和phpunit - 在原始问题中,也是一个批处理文件。 这就是为什么添加 cmd /c 解决了问题。

将此答案发布给像我这样可能遇到此行为的其他非 Windows 用户。

© www.soinside.com 2019 - 2024. All rights reserved.