我从 Java 执行一个外部批处理文件并将一个特殊属性传递给它。我发现有几个字符被错误地传递给我的批处理文件。我找不到 ProcessBuilder 类中提到的任何限制,也找不到转义这些字符的方法。
public static void main(String[] args) throws IOException {
/*
* correct processing: almost everything (even #$*%:'\/~?)
* fatal error: |<>
* trimming: ;=&
*/
ProcessBuilder builder = new ProcessBuilder("cmd", "/c", "batch.bat", "a;b;c;d");
final Process process = builder.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
System.out.println("Program terminated!");
}
我的批处理文件只是
echo %1
上面的代码只打印分号 (a) 之前的第一个字符。
我在 Win7 和 JDK 7 64 位上运行它。
目前我用稀有的字符替换了所有这些字符,反向替换稍后在我的最终脚本中完成。
知道如何在没有任何“翻译”的情况下正确传递这些字符吗?