【问题标题】:How to set environment variables with spaces?如何用空格设置环境变量?
【发布时间】:2016-03-25 00:54:38
【问题描述】:

我需要使用批处理文件为环境变量设置值。我为此编写了脚本:

@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"

但是,那也行不通。

注意:我使用的是 Windows 7。

【问题讨论】:

  • 经常犯的标准错误是使用set variable="value" 而不是set "variable=value"。例如,请参阅Why is no string output with 'echo %var%' after using 'set var = text' on command line?,了解使用命令 SET 在线指定第一个引号的位置的差异。
  • @Mofi - 事实上这就是答案......
  • Mofi 建议的一大优势是,set "variable=value" 确实在值中包含周围的引号,因此您需要只关心它们 i> 当扩展(读取)像"%variable%" 这样的值时,任何代码在引用方面都变得更加一致......

标签: batch-file command-line windows-7


【解决方案1】:

命令setx输出的错误是由于在将字符串分配给变量value时错误使用引号引起的。

命令为set,参数为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 的整个参数用双引号括起来。因此在解析行时忽略的是:

  • 命令 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 窗口需要以下语法,当前目录显示在窗口中。

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

【讨论】:

    【解决方案2】:

    setx foo "\"这个环境变量在每一端都有空格和双引号\""

    【讨论】:

      猜你喜欢
      • 2011-12-06
      • 2019-07-02
      • 2014-09-29
      • 2016-09-17
      • 2022-01-08
      • 1970-01-01
      • 2016-02-04
      • 2012-09-18
      相关资源
      最近更新 更多