Java 如何让ProcessBuilder处理嵌套引号?
我无法以与cmd.exe控制台相同的方式执行命令行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
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\"
""
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中执行的命令。我不敢相信这就是问题所在!谢谢你敏锐的目光!