我一直想知道批处理文件中"myvar=me"
和"myvar"="me"
之间的区别是什么?
这可能对我的节目有所影响,这是一个摇滚,纸张和剪刀游戏。
答案 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字符,这些字符可以是文件路径的一部分。