无法在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。