我一直想知道批处理文件中的"myvar=me"和"myvar"="me"有什么不同?
这可能会让我的程序有所不同,我的程序是一个石头、布和剪刀的游戏。
发布于 2018-04-09 13:02:08
在运行包含以下行的批处理文件时,可以很容易地看出其中的区别:
@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"通常是最好的。
发布于 2018-04-08 22:50:39
这取决于上下文。
如果在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",它们可以是文件路径的一部分。
https://stackoverflow.com/questions/49718987
复制相似问题