【问题标题】:Running a batch from Java where the cmd prompt goes away从 cmd 提示消失的 Java 运行批处理
【发布时间】:2015-08-25 00:04:20
【问题描述】:

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

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

所以我用了这个:

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

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

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

【问题讨论】:

  • 你试过start cmd /c ...。我也会考虑使用ProcessBuilder 而不是Runtime.exec
  • start /WAIT 怎么样?我不确定start cmd /C 是否真的有必要......
  • start cmd /c 导致 IOException,使用与 ProcessBuilder 相同的命令给我同样的问题,start /WAIT 导致 IOException。我也不认为startcmd /C 都是必要的,但是如果没有start,我根本没有命令提示符。
  • cmd /c batchfile.bat argument.js 应该可以工作,但如果不行,一个简单的解决方法是使用 exit 命令(不是 /B 开关)结束批处理文件
  • 当你调用它并且命令行敌人没有出现时,它仍然在进程中运行它。您可以使用 InputStream 从控制台读取输出。

标签: java batch-file cmd


【解决方案1】:

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

:: batchfile.bat
...
exit 0

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

改用这个

start cmd.exe /c ...

首先调用start,然后调用cmd.exe /c,然后根据需要添加参数。我在这里尝试了这两个选项,并且都可以正常工作以使批处理窗口按预期关闭。

【讨论】:

    【解决方案2】:

    将以下命令传递给运行时执行。

    taskkill /F /IM (进程名)

            Runtime.getRuntime().exec("taskkill /F /IM "+pProcessName);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      相关资源
      最近更新 更多