我必须执行目录E:/abc
中的xyz.cmd
文件。所以要执行的文件的绝对路径是E:/abc/xyz.cmd
。执行时,文件本身会创建一个新窗口。
我的代码片段是:-
String path = “E:\\abc”;
String cmd = path + “\\xyz.cmd”;
ProcessBuilder processBuilder = new ProcessBuilder(cmd);
processBuilder.redirectErrorStream(true);
processBuilder.directory(new File(path));
processBuilder.start();
这不起作用,但不会给出错误或异常。但是 cmd 文件工作正常,可以使用资源管理器或 cmd-prompt 从其目录手动执行它。 尝试过使用不同版本的jdk,但没有成功。我使用的是 Windows 7 操作系统。我也没有在任务管理器中看到该进程正在运行。 知道出了什么问题吗?相同的代码在具有相同配置的不同计算机上运行良好。
===编辑==== 这可能是一个安全问题吗?比如执行程序的用户没有足够的权限来执行文件?
最佳答案
您需要调用 cmd.exe
作为进程构建器字符串的第一部分,以便命令处理器能够调用 .cmd 文件。对于 .bat 文件或任何操作系统类型的命令也是如此。例如,请查看here .
另外,请看这里:When Runtime.exec() won't
编辑
您声明:
please understand, this is not the problem of not adding cmd.exe in the processbuilder; because of the previous commands, cmd.exe will be taken care.
到目前为止,我在您的帖子中没有看到任何文档表明这是真的,而且我的所有经验强烈表明事实并非如此。
您还声明:
Can this be a security issue? Something like the user executing the program is not having enough priveleges to execute a file?
除非您捕获并显示进程的输入流,否则无法知道。事实上,如果您不捕获此流,您可能会完全阻止您的进程运行。通常我们还必须捕获错误流,但您已将它们与
processBuilder.redirectErrorStream(true)
请阅读上面的“当 Runtime.exec() 不会时”链接,了解有关捕获流的必要性的更多信息。
关于java - 无法在java中执行cmd文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10999018/