运行
@echo off
setlocal enabledelayedexpansion
set x=some value with unsafe (^&^<^>()") characters inside
if 1 == 1 (
echo "value of x (!x!) is interesting"
)
给出
"value of x (some value with unsafe (&<>()") characters inside) is interesting"
我必须将值放在双引号内,以避免解析错误。但是,我不希望打印这些双引号。有没有办法暂时(只是安全地将它传递给echo
命令)打印报价值?
答案 0 :(得分:2)
您可以为变量添加引号,并在回显它时尝试字符串替换。 例如:
echo %x:"=%
但在你的情况下我不认为这会奏效。 让你的例子工作只是逃避括号:
echo value of x ^(!x!^) is interesting
不幸的是,没有100%的答案。
让我们知道它是否适合您或您找到了更好的解决方案
答案 1 :(得分:2)
答案与你的问题相同 How to escape variables with parentheses inside if-clause in a batch file?
@echo off
setlocal enabledelayedexpansion
set x=some value with unsafe (^&^<^>()") characters inside
if 1 == 1 (
set "output=value of x (!x!) is interesting"
echo !output!
)
答案 2 :(得分:2)
对不起,我觉得这里有点混乱。
如果要使用echo
命令打印任何特殊字符,请转义它。期。您的问题与延迟扩展无关。例如,此代码:
@echo off
if 1 == 1 (
echo value of x (anything) is interesting
)
标记错误,因为echo命令中的括号会干扰打开的if
。要解决这个问题,请按照weberik所说的那样逃避括号:
@echo off
if 1 == 1 (
echo value of x ^(anything^) is interesting
)
延迟变量扩展永远不会导致错误与变量内的值无关。