簡體   English   中英

如何通過Java運行多個cmd命令?

[英]How to run multiple cmd commands through Java?

我有一個簡單的 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”來創建進程,因為將命令和 arguments 作為字符串數組更具可讀性和可管理性。 我查看了 Runtime、Process 和 ProcessBuilder 的文檔。 我還搜索了類似的問題,以下是最接近的問題: 通過 Java 運行 cmd 命令 但是,如果所有命令都正常運行,我仍然遇到問題。 第一點:程序成功執行命令直到“ping”,我將其放置以確定問題發生的位置。 我通過 BufferedReader 在控制台中得到 cmd output 就好了。 然而,下一個命令應該運行由“jTextField1.getText()”指示的可執行文件,給出錯誤“文件名、目錄名或卷 label 語法不正確”,盡管我確保路徑在轉義雙引號內占空間。 這是我的語法嗎? 與雙符號的放置位置有關嗎? 是否每個帶有參數的單獨命令都需要在數組中是它自己的字符串? 我嘗試了那個和不同的東西,但它似乎總是導致錯誤。

您應該檢查您的路徑名是否正確,並嘗試將 cmd 作為一個參數值,而不是在cmd.exe /c之后以逗號分隔。 這將確保 arguments 作為 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};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM