如何确保启用延迟扩展的批处理脚本保留含!符号的变量值?
解决延迟变量扩展导致含!的密码变量失效问题
你遇到的问题是:主脚本启用了SETLOCAL ENABLEDELAYEDEXPANSION后,调用环境文件里带!的密码变量时,!会被自动解析掉,比如原本的CatDog!会变成CatDog。下面是几种可行的解决办法:
办法一:先加载环境变量,再开启延迟扩展
把调用环境文件的操作放在开启延迟扩展之前,让变量在普通环境下定义,避免被延迟扩展解析!:
修改后的MainScript.cmd:
CALL "_env.cmd" SETLOCAL ENABLEDELAYEDEXPANSION ECHO "%FTP_PSSWRD%" REM 后续如果需要用延迟扩展语法访问变量,直接用!FTP_PSSWRD!即可
办法二:在环境文件中转义!
如果必须先开启延迟扩展再调用环境文件,就在环境文件里把!用^^!转义,这样延迟扩展解析时会保留单个!:
修改后的_env.cmd:
SET "FTP_PSSWRD=CatDog^^!"
办法三:读取变量时临时关闭延迟扩展
如果主脚本无法调整调用顺序,也不想修改环境文件,可以在读取变量前临时关闭延迟扩展,读取完成后再重新开启:
修改后的MainScript.cmd:
SETLOCAL ENABLEDELAYEDEXPANSION CALL "_env.cmd" REM 临时关闭延迟扩展读取变量,避免!被解析 SETLOCAL DISABLEDELAYEDEXPANSION ECHO "%FTP_PSSWRD%" ENDLOCAL
内容的提问来源于stack exchange,提问作者chrtak
相关产品推荐
相关产品推荐

