在variables中跳出&符号 – 赢批处理

我有一个variables,包含&符号,我需要创build另一个variables,其中包含第一个。 我知道“&”字符可以用carret(^)转义,但是我不知道如何在variables内部转义文本。

set Name1 = Red ^& Green set Name2 = %Name1% ^& Blue 

“绿色”不被识别为内部或外部命令,可操作程序或batch file

我甚至不能“回声”包含&符号的variables – 我得到相同的错误。

我需要使用这些variables来input他们的内容到输出或操作variables命名的文件

 type "%Name1%.txt" type "%Name2%.txt" 

最简单的解决方法是使用引号进行分配,并延迟扩展。 这消除了任何转义的需要。

 @echo off setlocal enableDelayedExpansion set "Name1=Red & Green" set "Name2=!Name1! & Blue" echo !Name2! 

如果你有混合引用和不引用的文本,你有时必须逃脱一些字符。 但是这只是初始分配所需要的。 使用延迟扩展时,变量的内容永远不需要转义。

 @echo off setlocal enableDelayedExpansion set var="This & that" ^& the other thing. echo !var! 

不幸的是,您将不得不双重转义&符号,因为它正在被评估两次或将变量值放在引号中。

 set Name1=Red ^^^& Green set Name2=%Name1% ^& Blue 

但是,当您使用Name2时,您还需要添加另一组转义符。 这将是一个主要的痛苦。

 set Name1=Red ^^^^^& Green set Name2=%Name1% ^^^& Blue 

或使用报价(推荐)

 set "Name1=Red ^& Green" set "Name2=%Name1% ^& Blue" 

想到两个解决方案,这两个解决方案都不够普遍,但都是“工作”的:

  1. 如前面的解决方案所述,请务必将所需内容放在引号中,并在需要时将其删除。
  2. 重新引用&的:set name2 =%name1:&= ^&%^&Blue

最简单的解决办法就是这个:

 for /f "delims= usebackq" %a in (`echo "First & ? * Last"`) do echo # %~a 

…在批处理脚本中:

 for /f "delims= usebackq" %%a in (`echo "First & ? * Last"`) do echo # %%~a 

要么

 for /f "delims= usebackq" %%a in (`echo "%~1"`) do echo # %%~a