首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"myvar=me“和"myvar"="me”有什么区别?

"myvar=me“和"myvar"="me”有什么区别?
EN

Stack Overflow用户
提问于 2018-04-08 22:33:53
回答 2查看 154关注 0票数 0

我一直想知道批处理文件中的"myvar=me""myvar"="me"有什么不同?

这可能会让我的程序有所不同,我的程序是一个石头、布和剪刀的游戏。

EN

回答 2

Stack Overflow用户

发布于 2018-04-09 13:02:08

在运行包含以下行的批处理文件时,可以很容易地看出其中的区别:

代码语言:javascript
复制
@set "myvar=me"
@set "myvar"="me"
set myvar
@pause

第一行定义了一个环境变量,名称为myvar,值为me

第二行定义了一个环境变量,其名称很奇怪,名称为myvar",值为"me

第三行是Windows命令解释器在执行前对命令行进行预处理后输出的,输出环境变量名以myvar开头的所有环境变量以及环境变量名、等号和环境变量值。

以及在双击执行批处理文件的情况下,第四行暂停批处理执行,直到按下一个键以查看第三行的输出。

因此,输出的前三行是:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2018-04-08 22:50:39

这取决于上下文。

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

代码语言:javascript
复制
>set "a"="111"

代码语言:javascript
复制
>set
a"="111
...

但不是在这种情况下:

代码语言:javascript
复制
>set "a=111"

代码语言:javascript
复制
>set
a=111
...

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

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

代码语言:javascript
复制
@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-

代码语言:javascript
复制
-"1111"- -"2222"-
-"1111"- -"2222"-
-"1111"- -"2222"-
-"1111"-"2222"- --

正如您所看到的,这里的一些字符被视为命令行中的参数分隔符。

就我个人而言,我更喜欢在&)字符之前编写不带^-转义字符的set "var=value",它们可以是文件路径的一部分。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49718987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档