我编写了一个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()
引发错误,这是可以理解的。
任何答案都将不胜感激。
答案 0 :(得分:1)
https://stackoverflow.com/a/17120829/524743
数组中的第一个元素必须是可执行文件。因此,您必须调用cmd.exe才能调用批处理文件。
ProcessBuilder builder = new ProcessBuilder(Arrays.asList(new String[] {"cmd.exe", "/C", "batchCommand"}));