Variables Echo \将变量作为文本而不是变量bat写入
我有一个小问题,我想回显%USERNAME%,不是作为变量,而是作为文本“%U S E R N a M E%”(不带空格)如何实现这个使用批处理脚本Variables Echo \将变量作为文本而不是变量bat写入,variables,batch-file,text,Variables,Batch File,Text,我有一个小问题,我想回显%USERNAME%,不是作为变量,而是作为文本“%U S E R N a M E%”(不带空格)如何实现这个使用批处理脚本 Echo IF ^"%USERNAME%^"==^"BLABLA^" GOTO BLABLA >> test.txt 从cmd文件中(这是最有可能的情况,因为这是一个编程问答站点),您可以简单地将%标记加倍,因为它们在输出中变成单个%标记 检查以下成绩单(来自Windows 7): 您可以看到,双-%标记已转换为单个%字符,结果是创
Echo IF ^"%USERNAME%^"==^"BLABLA^" GOTO BLABLA >> test.txt
从
cmd
文件中(这是最有可能的情况,因为这是一个编程问答站点),您可以简单地将%
标记加倍,因为它们在输出中变成单个%
标记
检查以下成绩单(来自Windows 7):
您可以看到,双-%
标记已转换为单个%
字符,结果是创建的文件中的格式良好的表达式。@ECHO OFF
SETLOCAL
设置xyzy=plugh
echo您想要“%xyzy%”还是“%%xyzy%%”?
回显表单^“%xyzy%^”和^“^%xyzy^%^”在.bat中不起作用(但从提示符处执行)
后藤:EOF
为什么要转义引号?如图所示,在命令行上加倍百分比不起作用!加倍引号仅在批处理文件中起作用。在命令行上转义百分比似乎只起作用。您的示例实际上查找名为xyzy^
的变量,如果找不到,则打印删除了插入符号的原始文本。它将消失l如果之前您定义了set“xyzy^=causeFailure”
所有这些示例都是直接从命令行复制的,因此它们确实有效。当我在Windows 7命令行上使用echo^“%%xyzy%%^”
时,得到的结果是%plugh%“
。我过去在XP和Vista上做过类似的实验,但在命令行上,百分之二的测试对我来说从来都不起作用。Dbenham,那么你的环境就不同了,我认为,它们都是在Win7上执行的。我今天还要做进一步的检查。是的,请你这边再检查一遍。我在两台Win 7机器和一台XP机器上重新测试并获得了“%plugh%”
。我还看到jeb的多篇文章描述了我指定的行为,从来没有像你这样在命令行上用双百分比进行报告。+1,但插入符号实际上并没有在命令行上转义百分比。相反,处理器查找名为xyzy^
的变量,并在未找到时保留原始文本(不带插入符号)。只需要一个插入符号,它可以放在百分比之间的任何位置。但如果存在具有该名称的变量,则它将失败。例如,设置“xyzy^=value”
将导致%xyzy^%
的失败(它会扩展)。@dbenham-我认为这是一个传统问题<代码>%转义%
是~MSDOS2年份,需要维护。作为通用转义的^
直到NT
才被引入,以补充转义库,如“引号字符串”
。使用set
语法,如果set
参数被引用,则^
将包含在分配的变量名中,但如果使用原始的无引号语法,则不包括在内。除非绝对必要,否则最好避免使用^
。在变量名赋值中不需要引用插入符号设置“hello^world=ok”
和设置hello^world=ok
产生相同的结果。正常扩展不需要转义,因为它发生在转义处理之前,但延迟扩展确实需要转义<代码>回音%hello^world%和echo!你好^^世界代码>给出相同的结果。如果引用,则不需要转义:echo“!hello^world!”