我需要使用批处理文件将值设置为环境变量。我为此编写了脚本:
@echo off
set value="Hello world"
setx -M srijani "%srijani%;%value%"
它给出了错误:
ERROR: Invalid syntax. Default option is not allowed more than '2' time(s).
Type "SETX /?" for usage.
我在Google上搜索后发现,在使用空格时,我们需要将其写在双引号中。
set value="Hello world"
但是,那也行不通。
注意:我在Windows 7上。
最佳答案
命令 setx 所输出的错误是由于在将字符串分配给变量value
时使用引号引起的。
命令为,设置为,参数为variable=value
。对于大多数命令和应用程序,如果包含一个或多个空格或此列表中的任何其他字符,则可能且经常需要用双引号将参数引起来:&()[]{}^=;!'+,`~
。通过在命令提示符窗口cmd /?
或help cmd
中运行,这些字符将显示在最后的帮助页面输出中。
但是这里是错误的:
set value="Hello world"
对于等号后的第一个双引号,命令 set 的整个参数
variable=value
都不用双引号引起来。这导致将双引号解释为字符串的一部分,以分配给名称为
value
的变量。从等号到行尾的所有内容(包括双引号以及可能存在的尾随空格和水平制表符)在此处都分配给了value
变量,而不是预期的字符串Hello world
。关于扩大生产线
setx -M srijani "%srijani%;%value%"
结果是:
setx -M srijani "Value of variable srijani;"Hello world""
并且命令 setx 将错误的引用参数解释为语法错误。
正确的将使用:
set "value=Hello world"
现在,命令 set 的整个参数都用双引号引起来。因此,在解析该行时将忽略以下内容:
因此,仅将
Hello world
分配给名称为value
的变量。有关将字符串正确分配给环境变量的更多详细信息,请阅读Why is no string output with 'echo %var%' after using 'set var = text' on command line?上的答案。它还包含一个简单的演示批处理代码。
一些更多的信息:
如何解释在中间某处包含1个或多个引号的参数字符串取决于命令和相应的应用程序。解释在参数字符串中包含1个或多个
"
的参数的行为可能会有所不同,具体取决于所使用的编译器,如batch file: list rar file in specific folder and write result into text file的答案中所述,当然还有命令/应用程序的源代码。对于大多数命令和应用程序,正确的语法是:
command "parameter in quotes"
"Path to application\app.exe" "parameter in quotes"
但是有些应用程序需要在参数字符串中间加引号。 Windows资源管理器就是此类应用程序的一个示例。
要从批处理文件中打开资源管理器窗口,并在窗口中显示当前目录,需要以下语法。
explorer.exe /e,"%CD%"
不工作的是:
explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"
因此,
explorer.exe
要求在要打开的目录之后在参数字符串中间用引号引起来的/e,
之后指定它,或者将"/e,%CD%"
和"/e %CD%"
分别解释为要在资源管理器窗口中显示的目录名称。另请参见SS64 - Windows Explorer command-line options。
关于batch-file - 如何用空格设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34353504/