首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么Java在使用ProcessBuilder执行时不打开批处理文件?

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

Stack Overflow用户
提问于 2015-05-12 09:46:43
回答 1查看 962关注 0票数 0

我编写了一个Java程序来打开一个导入到程序资源中的批处理文件。

即使在Eclipse中运行我的代码,批处理文件也不能工作。我已经使用打开了批处理文件,所以批处理文件可以工作。

该文件本质上是一个命令提示符,用于当它可能被组策略阻止时。

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

代码语言:javascript
复制
@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

现在,当我执行以下代码时:

代码语言:javascript
复制
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()上抛出一个错误,这是可以理解的,真的。

如有任何答复,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-12 10:37:24

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

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

代码语言:javascript
复制
ProcessBuilder builder = new ProcessBuilder(Arrays.asList(new String[] {"cmd.exe", "/C", "batchCommand"}));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30187186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档