Java 如何让ProcessBuilder处理嵌套引号?

Java 如何让ProcessBuilder处理嵌套引号?,java,windows,process,cmd,processbuilder,Java,Windows,Process,Cmd,Processbuilder,我无法以与cmd.exe控制台相同的方式执行命令行 命令行是: show\u parameters.bat jdk-1\u 5\u 0\u 22-windows-i586-p.exe/s/v”/qn INSTALLDIR=\“C:\Program Files(x86)\gili\” 批处理文件show_parameters.bat(以下)显示cmd.exe将命令行分解成的标记 Testcase.java(如下)尝试使用ProcessBuilder执行与#1相同的命令行 如果运行show\u pa

我无法以与cmd.exe控制台相同的方式执行命令行

  • 命令行是:
    show\u parameters.bat jdk-1\u 5\u 0\u 22-windows-i586-p.exe/s/v”/qn INSTALLDIR=\“C:\Program Files(x86)\gili\”
  • 批处理文件
    show_parameters.bat
    (以下)显示cmd.exe将命令行分解成的标记
  • Testcase.java
    (如下)尝试使用ProcessBuilder执行与#1相同的命令行
  • 如果运行
    show\u parameters.bat jdk-1\u 5\u 0\u 22-windows-i586-p.exe/s/v”/qn INSTALLDIR=\“C:\Program Files(x86)\gili\”
    您将获得:

    Console tokens:
    
    jdk-1_5_0_22-windows-i586-p.exe
    /s
    /v"/qn INSTALLDIR=\"C:\Program
    Files
    (x86)\gili\""
    
    Java tokens: [cmd.exe, /c, show_parameters.bat, jdk-1_5_0_22-windows-i586-p.exe,
     /s, /v"/qn INSTALLDIR=\"C:\Program Files (x86)\gili\""]
    
    Console tokens:
    
    jdk-1_5_0_22-windows-i586-p.exe
    /s
    "/v"/qn
    INSTALLDIR
    \"C:\Program Files (x86)\gili\"
    ""
    
  • 如果运行
    java测试用例
    ,您将得到:

    Console tokens:
    
    jdk-1_5_0_22-windows-i586-p.exe
    /s
    /v"/qn INSTALLDIR=\"C:\Program
    Files
    (x86)\gili\""
    
    Java tokens: [cmd.exe, /c, show_parameters.bat, jdk-1_5_0_22-windows-i586-p.exe,
     /s, /v"/qn INSTALLDIR=\"C:\Program Files (x86)\gili\""]
    
    Console tokens:
    
    jdk-1_5_0_22-windows-i586-p.exe
    /s
    "/v"/qn
    INSTALLDIR
    \"C:\Program Files (x86)\gili\"
    ""
    
  • 是否可能导致ProcessBuilder产生与#1相同的标记化?或者这是Java中的一个错误


    show_parameters.bat Testcase.java
    import java.io.*;
    公共类测试用例
    {
    公共静态void main(字符串[]args)引发IOException、InterruptedException
    {
    String base=“C:\\Program Files(x86)\\gili”;
    ProcessBuilder ProcessBuilder=new ProcessBuilder(“cmd.exe”、“/c”、“show_parameters.bat”、“jdk-1_5_0_22-windows-i586-p.exe”、“/s”,
    “/v\”/qn INSTALLDIR=\\\”+base+“\\\”);
    processBuilder.redirectErrorStream(true);
    System.out.println(“Java标记:+processBuilder.command());
    Process=processBuilder.start();
    BufferedReader in=新的BufferedReader(新的InputStreamReader(process.getInputStream());
    while(true)
    {
    String line=in.readLine();
    如果(行==null)
    打破
    系统输出打印项次(行);
    }
    }
    }
    
    试着这样做:

    ProcessBuilder processBuilder = new ProcessBuilder("cmd.exe", "/c", "show_parameters.bat jdk-1_5_0_22-windows-i586-p.exe /s /v\"/qn INSTALLDIR=\\\"" + base + "\\\"\"");
    


    “/c”只需要一个参数-将在CMD中执行的命令。我不敢相信这就是问题所在!谢谢你敏锐的目光!