如何安全地回显if-clause跳过周围双引号内变量的值?

时间:2011-10-26 08:51:41

标签: windows batch-file

运行

@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命令)打印报价值?

3 个答案:

答案 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
)

延迟变量扩展永远不会导致错误与变量内的值无关。