j-6ren">
gpt4 book ai didi

java - 从 java 应用程序在当前 cmd.exe 中运行 .bat

转载 作者:行者123 更新时间:2023-11-30 02:18:31 24 4
gpt4 key购买 nike

我有一个简单的批处理文件:

测试.bat

@echo off
echo "Hello World!"

我想运行一个java应用程序,在同一个cmd.exe进程中运行该批处理文件。一个例子如下:

> java -jar my.jar
Hello World!

这是一个微不足道的案例,因为我计划使用的真正批处理文件将要求用户在特定时间输入,因此我需要批处理文件运行,而不仅仅是像显示示例。

我尝试了以下方法但没有成功:

Process p = Runtime.getRuntime().exec("./my.bat");
// and
ProcessBuilder pb = new ProcessBuilder("./my/bat");
Process p = pb.start();
p.waitfor();

这可行吗?我不想打开另一个 cmd.exe,因此我的 exec() 参数不是:

'cmd/k start ./my.bat'

这将打开一个新窗口。

我的项目结构:

root
-- my.jar
-- src
---- ...
-- manifest.mf
-- my.bat

所以当我发出:

> my.bat
"Hello World!"

> java -jar my.jar
// nothing appears

最佳答案

实际上不可能在启动 Java 进程的 cmd.exe 进程中运行批处理文件。这是因为 cmd.exe 进程当前在等待 Java 进程完成时正在执行与 Java 的 Process.waitFor() 相同的操作。

但也许您真正想要的不一定是在与 Java 应用程序父进程相同的进程中运行批处理文件,而只是在同一个窗口中运行。为此,请使用 ProcessBuilder.inheritIO() :

ProcessBuilder pb = new ProcessBuilder("my.bat");
pb.inheritIO();
Process p = pb.start();
p.waitfor();

inheritIO() 调用会导致批处理文件的输出出现在 Java 进程的 System.out 中,并且 Java 进程的 System.in 中会链接到批处理文件的输入。

关于java - 从 java 应用程序在当前 cmd.exe 中运行 .bat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47554212/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com