簡體   English   中英

ProcessBuilder無法在路徑中運行帶空格的bat文件

[英]ProcessBuilder cannot run bat file with spaces in path

我有以下代碼段來運行bat文件:

String workingDir = System.getProperty("user.dir");

ProcessBuilder pb = new ProcessBuilder("cmd", "/c", 
"\"" + workingDir + File.separator + "midl.bat\"");

Process ddsBuildProc = pb.start();

ddsBuildProc.waitFor();

workingDir包含路徑中的空格。 雖然我使用引號括起workingDir + fileName字符串,但shell仍會拆分workingDir並且不運行bat文件。 如果手動嘗試並復制粘貼 - 在Windows命令窗口中執行bat文件路徑字符串,它將按預期工作。 這可能是什么問題?

此外,請不要將此問題視為重復,因為我在其他問題中嘗試了所有解決方案但沒有成功。

  • 不要在命令列表中引用命令,除非執行的命令需要它,否則這只會填充
  • user.dir是你的程序當前正在執行的上下文......所以包含它實際上是沒有意義的,你可以midl.bat使用midl.bat (假設命令存在於當前執行上下文中)

我寫了一個非常簡單的批處理文件......

@echo off
dir

我把它放在我的“C:\\ Program Files”目錄中,因為我需要一個帶空格的路徑並使用....

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.logging.Level;
import java.util.logging.Logger;

public class RunBatch {

    public static void main(String[] args) {
        ProcessBuilder pb = new ProcessBuilder(
                        "cmd", "/c", "listme.bat"
        );
        pb.directory(new File("C:/Program Files"));
        pb.redirectError();
        try {
            Process process = pb.start();
            InputStreamConsumer.consume(process.getInputStream());
            System.out.println("Exited with " + process.waitFor());
        } catch (IOException | InterruptedException ex) {
            ex.printStackTrace();
        }
    }

    public static class InputStreamConsumer implements Runnable {

        private InputStream is;

        public InputStreamConsumer(InputStream is) {
            this.is = is;
        }

        public static void consume(InputStream inputStream) {
            new Thread(new InputStreamConsumer(inputStream)).start();
        }

        @Override
        public void run() {
            int in = -1;
            try {
                while ((in = is.read()) != -1) {
                    System.out.print((char) in);
                }
            } catch (IOException exp) {
                exp.printStackTrace();
            }
        }

    }

}

運行它沒有任何問題......

暫無
暫無

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

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