批处理中无引号显示含重定向符变量的方法(禁用文件/for/延迟扩展)
问题:无引号显示含重定向符的环境变量(约束:无延迟扩展/for命令/文件写入)
给定不可修改的输入:SET myvar="aaa<bbb",需要实现无引号显示变量%myvar%的内容,同时必须遵守以下约束:
- 不得写入文件系统
- 不得使用
for命令 - 不得启用延迟扩展
已尝试但失败的方法
以下几种写法均无法得到预期结果:
echo %myvar:"=% call echo %%myvar:"=%% call echo %%myvar:"=^^<%% set tmp=%myvar:"=% call echo ^^^%tmp:<^^^<^^^% call set stripped=%%myvar:"=%% call echo ^^^%stripped:^<=^^^<%%%
验证:无需延迟扩展即可显示<符号
可以通过以下代码验证,不使用延迟扩展也能直接显示重定向符<:
set myvar=aaa^^^<bbb echo %myvar%
但该代码修改了原始输入的变量定义,不符合问题要求。
后续尝试
基于上述验证,尝试将变量%ttt%设置为"aaa^^^<bbb":
set ttt=%myvar:<^^^<% echo %ttt%
执行后会显示"aaa^^^<bbb",符合预期。但尝试去除引号时均失败:
echo "%ttt:"=%"显示"aaa^^^<bbb",说明引号已被成功去除(显示的引号是echo命令自行添加的)echo %ttt:"=%显示aaa^<bbb,并非目标结果aaa<bbb
编辑补充:
经进一步试验,已找到符合所有约束条件的解决方案,详见下方自答内容。
内容的提问来源于stack exchange,提问作者George Robinson
相关产品推荐
相关产品推荐

