我需要使用批处理文件将值设置为环境变量。我为此写了剧本:
@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上。
答案 0 :(得分:6)
命令 setx 输出的错误是由于在将字符串分配给变量value
时错误使用引号引起的。
命令设置,参数为variable=value
。对于大多数命令和应用程序,如果包含1个或多个空格或此列表中的任何其他字符,则可能并且通常需要使用双引号括起参数:&()[]{}^=;!'+,`~
。通过在命令提示符窗口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 窗口需要以下语法,当前目录显示在窗口中。
explorer.exe /e,"%CD%"
不工作是:
explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"
因此explorer.exe
要求在/e,
之后在参数字符串中间使用引号指定要打开的目录,或者分别将"/e,%CD%"
解释为"/e %CD%"
作为目录的名称带有在资源管理器窗口中显示的路径。
另请参阅 Windows资源管理器命令行选项:
这些Microsoft支持文章中记录的 Windows资源管理器命令行选项在所有3篇文章中都是相同的,也适用于Windows Server 2003,Windows Vista上的 Explorer , Windows Server 2008 R2,Windows 7,Windows Server 2012 R2,Windows 8.0,Windows 8.1,Windows 10,换句话说,适用于所有32位和64位Windows。
答案 1 :(得分:0)
setx foo“ \”此环境变量的两端都有空格和双引号\“”