如何设置带空格的环境变量?
How to set environment variables with spaces?
我需要使用批处理文件为环境变量设置值。我为此编写了脚本:
@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.
我用谷歌搜索,发现在使用空格时我们需要将其写在双引号内。
set value="Hello world"
但是,这也行不通。
注:我在Windows7.
命令 setx 的错误输出是由于在将字符串分配给变量 value
.
时错误使用引号引起的
命令为设置,参数为variable=value
。对于大多数命令和应用程序,如果包含 1 个或多个空格或此列表中的任何其他字符,则可能并且通常需要用双引号将参数括起来:&()[]{}^=;!'+,`~
。这些字符显示在命令提示符 window 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 的整个参数都用双引号括起来。因此在解析行时忽略的是:
- 命令 set 和第一个双引号之间的所有 spaces/tabs,
- 第一个双引号,
- 最后一个双引号,
- 以及所有可能存在的 spaces/tabs 在最后一个双引号之后。
所以 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 window 需要以下语法,当前目录显示在 window.
explorer.exe /e,"%CD%"
不工作的是:
explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"
所以explorer.exe
要求打开的目录在/e,
之后指定,在参数字符串中间用引号引起来,或者将"/e,%CD%"
分别解释为"/e %CD%"
作为名称在 Explorer window.
中显示路径的目录
setx foo "\"this env var has spaces and double quotes at each end\""
我需要使用批处理文件为环境变量设置值。我为此编写了脚本:
@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.
我用谷歌搜索,发现在使用空格时我们需要将其写在双引号内。
set value="Hello world"
但是,这也行不通。
注:我在Windows7.
命令 setx 的错误输出是由于在将字符串分配给变量 value
.
命令为设置,参数为variable=value
。对于大多数命令和应用程序,如果包含 1 个或多个空格或此列表中的任何其他字符,则可能并且通常需要用双引号将参数括起来:&()[]{}^=;!'+,`~
。这些字符显示在命令提示符 window 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 的整个参数都用双引号括起来。因此在解析行时忽略的是:
- 命令 set 和第一个双引号之间的所有 spaces/tabs,
- 第一个双引号,
- 最后一个双引号,
- 以及所有可能存在的 spaces/tabs 在最后一个双引号之后。
所以 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 window 需要以下语法,当前目录显示在 window.
explorer.exe /e,"%CD%"
不工作的是:
explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"
所以explorer.exe
要求打开的目录在/e,
之后指定,在参数字符串中间用引号引起来,或者将"/e,%CD%"
分别解释为"/e %CD%"
作为名称在 Explorer window.
setx foo "\"this env var has spaces and double quotes at each end\""