5

我可以通过多种方式将双引号和大于号传递给任何命令:'"', "\"",">"

但是当我尝试将它们一起传递时

C:\>echo "\">"
The system cannot find the path specified.

与 相同"\"\>"。我可以让它与单引号一起工作,但由于我已经在处理引号方面做了很多事情,所以我想把它全部放在双引号内。

有什么办法可以逃避吗?

我在 windows7 上,但我相信这是一些向后兼容的“功能”,所以不确定这个信息是否相关。

编辑1:

我坚信 Endoro 的答案是正确的……但这并不是那么简单。CMD 的处理^>方式不同,具体取决于字符串中是否存在转义的双引号。有人知道为什么吗?!还是不同的转义方法?

C:\>sh echo "\"^>"
">

C:\>sh echo "a^>"
a^>

C:\>echo "\"^>"
"\">"

C:\>echo "a^>"
"a^>"

编辑 2:这里是 Monacraft 建议的测试用例,^在字符串周围的引号之前使用

C:\>echo ^"a/>"
The system cannot find the path specified.
(we still need to escape that > symbol)

C:\>echo ^"a/^>"
"a/>"
(work fine without \" in the string)

C:\>echo ^"\"/^>"
"\"/^>"
(add a single \" and the ^> escaping stop to works)

C:\>echo ^""/^>"
""/^>"
(ok, using ^ before the string means i dont have to escape the " anymore)

C:\>echo ^"^\"/^>"
"\"/^>"
(but what if i have an actual \" in my input that i have to escape... would ^\ prevent this from happening? nope)
4

1 回答 1

3

好的,我不能给你一个完整的解释,但是如果你在双引号之前放一个转义字符,它会起作用:

C:\>echo "a^>"
"a^>"

C:\>echo ^"a^>"
"a>"

我认为通过在字符串之前放置 a ^,您可以告诉 cmd 不要将^字符串内部的 a 视为实际字符串的一部分。这就是为什么:

C:\>echo "text^>" ^"text^>"
"text^>" "text>"

这样做。但是,我不能给你一个完整的解释,但至少这解决了你的问题。

编辑2:

好的,对于编辑 2,我只能说您不需要转义字符串中的任何内容!

C:\>echo ^"\"/>"
"\"/>"

还找到了这个网站,它解释说要逃避\所有你需要的是\\. 单击此处了解更多信息。只需将引号 ( )"加倍。""

于 2013-08-28T23:12:57.940 回答