我有一个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"
想到两个解决方案,这两个解决方案都不够普遍,但都是“工作”的:
最简单的解决办法就是这个:
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