有什么区别" myvar = me"和" myvar" ="我"?

时间:2018-04-08 14:33:53

标签: batch-file cmd

我一直想知道批处理文件中"myvar=me""myvar"="me"之间的区别是什么?

这可能对我的节目有所影响,这是一个摇滚,纸张和剪刀游戏。

2 个答案:

答案 0 :(得分:1)

使用以下行运行批处理文件时可以很容易地看出差异:

@set "myvar=me"
@set "myvar"="me"
set myvar
@pause

第一行定义了一个名为myvar且值为me的环境变量。

第二行定义了一个名为myvar"的奇怪名称为"me的环境变量。

第三行是在执行前预处理命令行后由Windows命令解释器输出的,并输出名称以myvar开头的所有环境变量,其中包含环境变量名,等号和环境变量值。

第四行停止批量执行,直到按下一个键以查看第三行的输出,以便双击执行批处理文件。

所以输出的前三行是:

set myvar
myvar=me
myvar"="me

有关如何正确定义环境变量的详细信息,并在以下位置正确分配值:

Why is no string output with 'echo %var%' after using 'set var = text' on command line?

它用文本和示例解释了为什么语法set "variable=value"通常是最好的。

答案 1 :(得分:0)

这取决于背景。

如果在set命令中使用它,它可以将引号视为变量名称和值的一部分:

>set "a"="111"

'

>set
a"="111
...

但不是在这种情况下:

>set "a=111"

'

>set
a=111
...

cmd.exe的内部逻辑很简单,因为它逐个字符地吃掉并从字符串的最左边和右边部分删除引号。

这是另一个上下文(文件test.bat):

@echo off

call :TEST "1111"="2222"
call :TEST "1111","2222"
call :TEST "1111";"2222"
call :TEST "1111"-"2222"

exit /b 0
:TEST 
echo -%1- -%2-

'

-"1111"- -"2222"-
-"1111"- -"2222"-
-"1111"- -"2222"-
-"1111"-"2222"- --

如您所见,这里将一些字符视为命令行中的参数分隔符。

我个人更喜欢在set "var=value"&字符之前编写)而不是^ -escape字符,这些字符可以是文件路径的一部分。