我有一个包含&符号的变量,我需要创建另一个包含第一个的变量。我知道“&”字符can be escaped with carret (^),但我不知道如何转义变量中的文本。
set Name1 = Red ^& Green
set Name2 = %Name1% ^& Blue
'绿色'不被识别为内部或外部命令,可操作程序或批处理文件。
我甚至无法“回应”包含&符号的变量 - 我得到了同样的错误。
我需要使用变量才能将其内容输入到输出或操作由变量命名的文件,如
type "%Name1%.txt"
type "%Name2%.txt"
答案 0 :(得分:20)
最简单的解决方案是使用引号进行分配和延迟扩展。这消除了任何转义的需要。
@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!
答案 1 :(得分:7)
不幸的是,由于它被评估两次或者将变量值放在引号中,所以你必须双倍转义&符号。
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"
答案 2 :(得分:0)
我想到了两种解决方案,它们都不够通用,但它们都“有效”:
答案 3 :(得分:-2)
最简单的解决方案是:
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