Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Variables Echo \将变量作为文本而不是变量bat写入_Variables_Batch File_Text - Fatal编程技术网

Variables Echo \将变量作为文本而不是变量bat写入

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): 您可以看到,双-%标记已转换为单个%字符,结果是创

我有一个小问题,我想回显%USERNAME%,不是作为变量,而是作为文本“%U S E R N a M E%”(不带空格)如何实现这个使用批处理脚本

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!”