设置变量时如何逃脱批处理文件上的特殊字符



我需要用字符串!5 [4U} 〜yfwwre设置一个变量。那里有一些特殊的角色,但我无法完全正确。

我的延迟变量扩展已经开始,并基于https://www.robvanderwoude.com/escapechars.php,我尝试了以下方法:

  • set pass = ^^!5 [4U}〜yfwwre" 4a
  • set pass = ^^!5 [4U}〜yfwwre" 4a
  • set pass = ^^!5 [4U} 〜yfwwre" 4a
  • set" pass =!5 [4U} 〜yfwwre" 4a"
  • set" pass = ^^!5 [4U} 〜yfwwre" 4a"
  • set" pass = ^^!5 [4U} 〜yfwwre"" 4a"

他们都没有为我工作。我究竟做错了什么?

@ECHO OFF
SETLOCAL
SET "var=!5[4U}~YfWWre"4a"
ECHO var=%var%
SET var
GOTO :EOF

对我来说很好...但是您正在使用delayedexpansion SO

@ECHO OFF
SETLOCAL enabledelayedexpansion
SET "var=^!5[4U}~YfWWre"4a"
ECHO var=%var%
SET var
GOTO :EOF

表明它取决于您如何显示字符串。

@ECHO OFF
SETLOCAL enabledelayedexpansion
SETLOCAL disabledelayedexpansion
SET "var=!5[4U}~YfWWre"4a"
ECHO var=%var%
SET var
endlocal&SET "var=%var:!=^!%"
ECHO var=%var%
SET var
GOTO :EOF

演示了相同的现象 - 如果字符串包含多个!,则像!5[4U}~!YfWWre"4a一样,echo之间的差异评估字符串和set的差异不大。

因此,快速答案是 - 使用该值时返回disabledelayedexpansion模式。

最新更新