java - 从 Java 运行批处理,cmd 提示符消失

标签 java batch-file cmd

我能够使用 SO 问题的合并来获得一行代码:

  • 从 Java 应用程序中运行批处理文件
  • 包含与批处理文件位于同一目录中的参数
  • 参数和批处理文件位于与 JAR/java 应用程序无关的目录中

所以我用了这个:

Runtime.getRuntime().exec("cmd /c start batchfile.bat argument.js", null, new File( path ));

这很有效,只是它在执行完批处理文件后使 cmd 提示符保持打开状态。我环顾四周,似乎有/c 标志应该使它在运行后关闭,但对我来说它一直保持打开状态。我尝试删除“开始”,但这意味着 cmd 提示符根本不会打开。

是否因为我结合了一个参数并使用了不同的路径,所以它不会导致 cmd 提示符打开,然后像大多数示例一样在完成后关闭?

最佳答案

按该顺序调用 cmd.exestart 会创建一个单独的窗口,但根据您的描述,命令 shell 似乎并未终止。我能够在一个简单的批处理脚本中复制这种行为。如果您想让 Java 调用保持原样,请检查并确保您的批处理脚本包含 exit 语句。最好根据批处理脚本中的成功或失败条件退出(即:exit 0exit 1 等...)

:: batchfile.bat
...
exit 0

假设您没有在批处理脚本中启动任何新 shell 或提示输入,则向现有批处理脚本添加显式退出应该会导致窗口关闭。您还可以尝试按原样保留批处理脚本,并按照其他人在评论中建议的那样,稍微更改命令文本的顺序。

改用这个

start cmd.exe /c ...

首先调用start,然后调用cmd.exe/c,然后根据需要调用参数。我在这里尝试了这两个选项,其中一个都工作得很好,导致批处理窗口按预期关闭。

关于java - 从 Java 运行批处理,cmd 提示符消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32193594/

相关文章:

java - 冲洗物体的正确位置

java - Neo4j 的 php api 与 java 遍历框架

exe 的命令行参数

windows - 如何使用 cmd 在最小化窗口中启动 Windows 10 应用程序?

windows - 打开 .bat 文件脚本后如何保持 cmd 运行

visual-studio - 如何打开vs2015的开发者命令提示符?

windows - 为windows8中的应用程序添加dokey

java - Lucene 索引文件损坏

internet-explorer - 如何从批处理文件打开和关闭 Internet Explorer?

java - 小程序和 Jackson 外部 jar : Can not access public class