微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过Java运行多个cmd命令?

如何解决如何通过Java运行多个cmd命令?

我有一个简单的 GUI,可以选择一个可执行文件一个批处理文件。单击“运行”应该启动一个命令行实例,然后运行给定选定批处理的可执行文件。然而,打嗝似乎出现在不同的点。这是相关的代码片段:

String[] commands = {"cmd.exe","/c","C:\\Xilinx\\14.7\\ISE_DS\\settings64.bat && cd /d ","\"" + simFile.getParent() + "\""," && ping localhost && ","\"" + jTextField1.getText() + "\""," -tclbatch \"" + jTextField2.getText() + "\""};

ProcessBuilder simBuilder = new ProcessBuilder(commands);
simBuilder.redirectErrorStream(true);
Process simulation = simBuilder.start();

BufferedReader reader = new BufferedReader(new InputStreamReader(simulation.getInputStream()));
String line;
while (true) {
    line = reader.readLine();
    if (line == null)
        break;
    System.out.println(line);
}

我选择通过 ProcessBuilder 而不是“Runtime.getRuntime().exec”来创建进程,因为将命令和参数作为字符串数组更易读和更易于管理。我查看了 Runtime、Process 和 ProcessBuilder 的文档。我还搜索了类似的问题,以下是最接近的:Run cmd commands through Java。但是,如果所有命令都正常运行,我仍然遇到问题。第一点:程序成功执行命令直到“ping”,我放置它以确定问题发生的位置。我通过 BufferedReader 在控制台中得到 cmd 输出就好了。但是,下一个命令应该运行由“jTextField1.getText()”指示的可执行文件,尽管我确保路径在转义的双引号内,但会给出“文件名、目录名或卷标语法不正确”的错误占空间。这是我的语法吗?与双符号的放置位置有关吗?是否每个单独的命令及其参数都需要在数组中是它自己的字符串?我尝试了不同的方法,但似乎总是会导致错误

解决方法

您应该检查您的路径名是否正确,并尝试将 cmd 作为一个参数值,而不是在 cmd.exe /c 后以逗号分隔。这将确保参数作为 CMD shell 处理的单个参数正确传递给 CMD:

import java.nio.file.Files
System.out.println("Files.isDirectory(simFile.getParent())="+Files.isDirectory(simFile.getParent()));
System.out.println("Files.isExecutable(jTextField1.getText())="+Files.isExecutable(Path.of(jTextField1.getText())));

String cmd = "C:\\Xilinx\\14.7\\ISE_DS\\settings64.bat && cd /d "+
            "\"" + simFile.getParent() + "\" && ping localhost && "+
            "\"" + jTextField1.getText() + "\" -tclbatch \"" + jTextField2.getText() + "\"";
String[] commands = {"cmd.exe","/c",cmd};

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。