我需要解决 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,非常感谢任何帮助。
我制作的开发脚本也遇到了同样的问题。我尝试了所有给定的解决方案但没有成功。最后,我用 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
我希望你觉得这很有用。
与 ujifgc 帖子类似,我在这些情况下使用“start /b ...”。 如果将对 phpunit 的调用封装在另一个批处理文件中,则可以使用“call”。
phpunit本身是一个批处理文件吗(我不太懂PHP,所以对这个工具不熟悉)?如果是这样,请尝试使用:
call phpunit --bootstrap test/bootstrap_test.php --verbose --log-junit
我用过
开始/b代码.
cmd /k ng 服务 --build-optimizer --aot
启动 Visual Studio Code,然后启动 Node js 服务器。
但是命令行出现了%更新文本等故障。
然后我用了
cmd /C 代码.
cmd /k ng 服务 --build-optimizer --aot
服务器进度更新时故障已停止。
尝试
start /WAIT phpunit ...
分叉进程并等待,或者只是 start phpunit ...
分叉并继续。帮助在这里:start /?
在搜索自动扣环的类似问题时发现了这一点。 简单的脚本
cd main
clasp pull
echo after pull
cd ..
不会回显并返回到原始文件夹,而此解决方案确实有效
cd main
cmd /c clasp pull
echo after pull
cd ..
这里的原因很简单:在 Windows 中,如果您从批处理文件内部运行批处理文件,则执行会在子批处理中继续,但不会返回到父后文件。
这里棘手的事情是,clasp(在我的例子中)和phpunit - 在原始问题中,也是一个批处理文件。 这就是为什么添加 cmd /c 解决了问题。
将此答案发布给像我这样可能遇到此行为的其他非 Windows 用户。