如何用空格设置环境变量?

时间:2015-12-18 10:30:56

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

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

@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上。

2 个答案:

答案 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资源管理器命令行选项

  • KB130510(Windows 95,Windows 98,Windows Millennium,W​​indows NT 4.0)
  • KB152457(Windows NT 4.0,Windows 2000)
  • KB314853(Windows XP)

这些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“ \”此环境变量的两端都有空格和双引号\“”