bar*_*lop 11 windows shell cmd.exe
我看到插入符号是记录的转义字符。
但是,我有一个例子表明,对于双引号字符,^不起作用,你必须使用\
C:\>runas /user:Administrator "cmd /k dir \"%userprofile%\""
Run Code Online (Sandbox Code Playgroud)
为什么会这样,它在哪里记录?
Pac*_*ier 17
在cmd中,\并没有逃跑"。这是一个快速的证明和解释:
运行echo "" & echo 1。(&是cmd中的一个特殊字符,left & right表示run leftthen run right。)我们可以看到,echo ""和echo 1都运行成功。
接下来,运行echo " & 1234。我们可以看到输出是" & 1234。这是因为开口"尚未关闭,因此它之后的所有内容都被解释为字符串,包括特殊的 char &。
运行echo "\" & 1234。
如果\确实转义以下内容","则不会关闭开头,并且字符& 1234将被解释为字符串的一部分。
如果\未能逃脱下面",那下面"将关闭字符串,& 1234将不被解释为字符串的一部分。
在输出中,我们没有看到& 1234解释为字符串的一部分。这证明,\已经逃不掉了"。
那么"在参数传递的引号中转义是什么?虽然^可以在引号之外工作(很容易通过 证明echo ^" & echo 1),但它不会在引号内转义引号。
的确,我们怎样才能让事情像echo """ & echo 1工作一样简单?
该^字符?...不,echo "^"" & echo 1输出"^"",而不是"""。
怎么样的"字符本身呢?...不, echo """" & echo 1 输出"""",而不是"""。
事实是,在参数传递的引号内没有任何东西可以逃脱"。您可以为此苦恼数年,却找不到任何解决方案。这只是 cmd 脚本的一些固有限制。
然而,好消息是您很可能永远不会遇到需要这样做的情况。当然,没有办法开始echo """ & echo 1工作,但这没什么大不了的,因为这只是一个你可能永远不会遇到的人为问题。
例如,考虑runas. 它工作正常,无需"在引号内转义,因为runas知道没有办法这样做并进行了内部调整来解决它。runas发明了自己的解析规则 ( runas /flag "anything even including quotes") 并且不以通常的方式解释 cmd 参数。这些特殊语法的官方文档非常稀少(或根本不存在)。除了/?and之外help,它主要是反复试验。
| 归档时间: |
|
| 查看次数: |
62967 次 |
| 最近记录: |