我怎样才能避免感叹号! 在cmd脚本?
当我有setlocal ENABLEDELAYEDEXPANSION
在cmd脚本中设置有任何方法,我可以逃脱! 我想用作命令的参数?
@echo off setlocal ENABLEDELAYEDEXPANSION echo I want to go out with a bang! echo I still want to go out with a bang^!
这就是我发现(^^)
@echo off setlocal ENABLEDELAYEDEXPANSION echo I want to go out with a bang^^!
对FrVaBe的回答再补充一点。
通常^^!
作品,但在报价中,你只需要^!
代替。
echo I want to go out with a bang^^! echo He said "Bang^!"
这是批parsing器的转义机制的结果。
首先parsing器parsing一行,并且脱字符转义下一个字符,在这种情况下它对&|<>()"<linefeed>
有影响,但只在引号之外,因为引号内部的所有字符都是”正常“并且脱字符本身没有效果。
随着延迟扩展一个额外的parsing步骤如下,还有一个逃脱字符为下一个字符,但只影响!
和^
,并且在这个parsing步骤中引号被忽略。 这个额外的步骤只会被执行,如果至less有一个!
在线。
setlocal DisableDelayedExpansion echo DisableDelayedExpansion echo one caret^^ echo one caret^^ bang! "boom^!" echo( setlocal EnableDelayedExpansion echo EnableDelayedExpansion echo one caret^^ echo none caret^^ bang^^! "boom^!"
—-输出——
DisableDelayedExpansion one caret^ one caret^ bang! "boom^!" EnableDelayedExpansion one caret^ none caret bang! "boom!"
编辑
这里有一个稍微修改的例子,可以更好地说明所需的各种换码排列,具体取决于上下文。 唯一需要不寻常转义的情况是最后一个延迟扩展的例子,至less存在一个!
在线上。
@echo off setlocal DisableDelayedExpansion echo DisableDelayedExpansion echo caret^^ "caret^" echo caret^^ bang! "caret^ bang!" echo( setlocal EnableDelayedExpansion echo EnableDelayedExpansion echo caret^^ "caret^" echo caret^^^^ bang^^! "caret^^ bang^!"
– 输出 –
DisableDelayedExpansion caret^ "caret^" caret^ bang! "caret^ bang!" EnableDelayedExpansion caret^ "caret^" caret^ bang! "caret^ bang!"
谢谢。 为了增加这个有价值的观点,如果一个脚本包含一个variables,其值包含一个“!”,那么下面的方法将按原样呈现该值:
@echoclosures SETLOCAL EnableDelayedExpansion set / P omg =input一个包含感叹号的值: echo传统:%omg% 回声另类:!omg! 暂停
请在下面的示例中find如何在DISABLEDELAYEDEXPANSION和ENABLEDELAYEDEXPANSION状态下使用感叹号variables。
@echo off setlocal DISABLEDELAYEDEXPANSION set DB_password=encrypt!Pws echo %DB_password% SETLOCAL ENABLEDELAYEDEXPANSION echo !DB_password!