为什么Java在使用ProcessBuilder执行时不会打开批处理文件?

时间:2015-05-12 09:46:43

标签: java eclipse windows batch-file

我编写了一个Java程序,用于打开导入程序资源的批处理文件。

即使在Eclipse中运行我的代码,批处理文件也不起作用。我已使用Project Explorer打开批处理文件,因此批处理文件可以正常工作。

该文件基本上用作命令提示符,用于何时可被组策略阻止。

批处理文件的内容如下......

@ECHO OFF
TITLE Command Prompt
VER | FIND /I " "
ECHO A portable CMD made with Batch.
ECHO.

CD /D %SYSTEMDRIVE% && CD %USERPROFILE%

:USER
SET /P INPUT="%CD%>"
%INPUT%
ECHO.

GOTO USER

现在,当我执行此代码时:

ClassLoader classLoad = this.getClass().getClassLoader();
URL batchPath = classLoad.getResource("cmd.bat");
String batch = batchPath.toString();

System.out.println("batchPath " + batchPath);
System.out.println("batch " + batch);
String batchCommand = batch.replaceFirst("file:/", "");
batchCommand = batchCommand.replace('/', '\\');
batchCommand = batchCommand.replaceAll("%20", " ");

System.out.println(batchCommand);

ProcessBuilder pb = new ProcessBuilder("\"" + batchCommand + "\"");
pb.redirectErrorStream(true);
try {
    Process proc = pb.start();
} catch (Exception e) {
    e.printStackTrace();
}

...它似乎在Process proc = pb.start()引发错误,这是可以理解的。

任何答案都将不胜感激。

1 个答案:

答案 0 :(得分:1)

https://stackoverflow.com/a/17120829/524743

数组中的第一个元素必须是可执行文件。因此,您必须调用cmd.exe才能调用批处理文件。

ProcessBuilder builder = new ProcessBuilder(Arrays.asList(new String[] {"cmd.exe", "/C", "batchCommand"}));