我需要用字符串!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
模式。