无法在java中执行cmd文件

无法在java中执行cmd文件,java,processbuilder,Java,Processbuilder,我必须执行目录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); processBuil

我必须执行目录
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文件工作正常,可以使用explorer或cmd提示符从其目录手动执行。 尝试使用不同版本的jdk,但徒劳无功。我正在使用Windows7操作系统。我看不到进程也在任务管理器中运行。 知道出了什么问题吗?相同的代码可以在具有相同配置的不同计算机中正常工作

==编辑====
这会是一个安全问题吗?类似于执行程序的用户没有足够的权限执行文件?

您需要调用
cmd.exe
作为process builder字符串的第一部分,以便命令处理器能够调用.cmd文件。对于.bat文件或任何OS类型的命令也是如此。例如,请看

另外,请看这里:

编辑
你说:


请理解,这不是在processbuilder中不添加cmd.exe的问题;由于前面的命令,将注意cmd.exe

到目前为止,我在你的帖子中没有看到任何文件证明这是真的,而我所有的经验都强烈地表明了这一点

你还说:

这会是一个安全问题吗?类似于执行程序的用户没有足够的权限来执行文件

除非捕获并显示流程的输入流,否则无法知道。事实上,如果您不捕获这个流,您可能会阻止您的进程运行。通常我们还必须捕获错误流,但您已经将它们与

processBuilder.redirectErrorStream(true)

有关捕获流的必要性的更多信息,请阅读我上面的“When Runtime.exec()will not”链接。

您实际在哪里调用cmd.exe?如果你不调用cmd.exe,操作系统怎么知道如何处理你的xyz.cmd?满是鳗鱼的气垫船是正确的:cmd文件本身不是可执行的,它们实际上需要作为参数传递给cmd.exe才能启动。我不需要,因为xyz.cmd文件会解决这个问题。我肯定,因为我看到它在运行。@gkris:那么你错了。cmd文件不会自行运行,需要显式调用cmd.exe。一个简单的谷歌搜索就会显示这一点。您已经看到它在操作系统中运行,而不是在Java中运行——这是一个很大的区别。@gkris:您再次感到困惑,因为您看不到Windows资源管理器在幕后做什么——它正在为您调用cmd.exe。相信我,相信我们所有人——你需要调用cmd.exe.+1,特别是Java世界文章的最后一个链接。我的观点是,在您实现所有建议之前,您不应该奇怪为什么
进程
会失败。请理解,这不是不在processbuilder中添加cmd.exe的问题;由于前面的命令,将注意cmd.exe。