如何在批处理变量中添加大于号和小于号

8
当我尝试时
@echo off
set PTag=^<BR^>
echo %PTag%

我什么也没有得到。

现在有趣的是,如果最后一个 echo 后面有一行空白,我会得到:

The syntax of the command is incorrect.

如果我去掉 @echo off,那么它就会输出实际内容。
echo <BR>

我想在变量中添加各种HTML标签,然后将这些变量连接起来创建一个HTML文件输出。
3个回答

13

set PTag=^<BR^>设置变量PTag的值为<BR>

当你运行echo %PTag%时,它会展开为echo <BR>,这是一种无效的重定向。你需要使用以下方式转义PTag中的<>

set PTag=^^^<BR^^^>

第一个^自我转义,然后下一个转义<>

你也可以使用这个方法

set "PTag=^<BR^>"

第二种方法的原因:在引号内部,^失去了它的特殊含义。

如果是引号 ("),则切换引号标识。如果引号标识处于活动状态,则以下特殊字符不再具有特殊意义:^ & | < > ( )

Windows命令解释器(CMD.EXE)如何解析脚本?

大多数特殊字符(^ & ( ) < > |以及标准分隔符,;= SPACE TAB)只要放在 ""之间,就会失去它们特殊的意义,并且""本身不会成为变量值的一部分。

批处理文件中的特殊字符


现在变量内将包含值为^<BR^>,并将展开为echo %PTag%

echo ^<BR^>

这是一个有效的命令


5

只需引用您的 set

set "PTag=^<BR^>"
echo %PTag%

谢谢。您能否解释一下答案?我不太擅长批处理,这可能很明显,因为我不知道引号可以用来包装赋值语句。更准确地说,我不明白转义字符在引号中的工作原理。什么时候应该决定在命令参数周围使用引号? - Axonn
1
现在你提到它,我并不完全确定为什么,只知道它能工作 :) 大概是因为转义字符和换行符的关系,这个链接或许能给你一个更好的解释http://www.robvanderwoude.com/escapechars.php - Bali C

2

当您显示变量值时,只需使用延迟扩展:

@echo off
setlocal EnableDelayedExpansion

set "PTag=<BR>"
echo !PTag!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接