从Java中为cmd文件转义"< >"

4
在cmd.exe中,我尝试这样做:
echo " read "book <init>""

错误信息为:
系统找不到指定的文件。
它可以与以下内容一起使用:
echo "read "book ^<init^>""

但是如果我想从Java中作为参数发送,它将无法工作:

String s4 = "read \"book ^<init^> \"" ;

我该如何在Java中转义cmd的 < > 符号?

完整代码:

    public static void main(String[] args) throws IOException, InterruptedException{

    List<String> paramsArray = new ArrayList<String>();

    String s = "read \"book ^<init^> \"" ;
    paramsArray.add("exec.cmd"); //cmd file that only has echo %*
    paramsArray.add(s);

    ProcessBuilder process = new ProcessBuilder(paramsArray).inheritIO(); 

    Process p = process.start();

    int exitStatus = p.waitFor();

    System.out.println("exitStatus is " + exitStatus);

    if (exitStatus == 0)
    {
      System.out.println("Ok!");
    }
    else{

        System.out.println("Not ok!");
    }
}

你为什么希望在命令行上使用流重定向字符? - Kayaman
@Kamayan,很抱歉,我不明白这个问题。我的问题是我从另一个文件传递一些参数到一个批处理文件中,看起来像“revert this: "eu.popin.tm.<init>"”。我需要使用这个参数,但是系统报错说找不到指定的文件。我不明白cmd如何解释“<>”。 - Jimmy
">" 字符将命令的输出重定向到文件。"<" 字符将文件作为输入重定向到命令。这些字符在命令行上处理起来非常不方便。 - Kayaman
@Kayaman,我现在明白了。我希望将该参数视为字符串,从第一个“到最后一个”。我该怎么做? - Jimmy
1个回答

3

我觉得你的问题是:


"如何传递一个包含多个引号和特殊字符的参数到.bat文件中,以使该.bat文件不会对其进行解释?"


你可以在Java中将双引号("")替换为单引号:

your_string= your_string.replace("\"", "'");

但更好的方法是在你的字符串前面加^,例如:

 String s = "^" +"read \"book ^<init^> \"" ;

在命令提示符中进行测试:

echo " read "book <init>""

echo  ^" read "book <init>""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接