我能够使用 SO 问题的合并来获得一行代码:
- 从 Java 应用程序中运行批处理文件
- 包含与批处理文件位于同一目录中的参数
- 参数和批处理文件位于与 JAR/java 应用程序无关的目录中
所以我用了这个:
Runtime.getRuntime().exec("cmd /c start batchfile.bat argument.js", null, new File( path ));
这很有效,只是它在执行完批处理文件后使 cmd 提示符保持打开状态。我环顾四周,似乎有/c 标志应该使它在运行后关闭,但对我来说它一直保持打开状态。我尝试删除“开始”,但这意味着 cmd 提示符根本不会打开。
是否因为我结合了一个参数并使用了不同的路径,所以它不会导致 cmd 提示符打开,然后像大多数示例一样在完成后关闭?
最佳答案
按该顺序调用 cmd.exe
和 start
会创建一个单独的窗口,但根据您的描述,命令 shell 似乎并未终止。我能够在一个简单的批处理脚本中复制这种行为。如果您想让 Java 调用保持原样,请检查并确保您的批处理脚本包含 exit
语句。最好根据批处理脚本中的成功或失败条件退出(即:exit 0
或 exit 1
等...)
:: batchfile.bat
...
exit 0
假设您没有在批处理脚本中启动任何新 shell 或提示输入,则向现有批处理脚本添加显式退出应该会导致窗口关闭。您还可以尝试按原样保留批处理脚本,并按照其他人在评论中建议的那样,稍微更改命令文本的顺序。
改用这个
start cmd.exe /c ...
首先调用start
,然后调用cmd.exe/c
,然后根据需要调用参数。我在这里尝试了这两个选项,其中一个都工作得很好,导致批处理窗口按预期关闭。
关于java - 从 Java 运行批处理,cmd 提示符消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193594/