如何设置带空格的环境变量?

2023-12-24

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

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


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

命令是set参数是variable=value。对于大多数命令和应用程序,如果参数包含 1 个或多个空格或此列表中的任何其他字符,则可以且通常需要用双引号将参数引起来:&()[]{}^=;!'+,`~。通过在命令提示符窗口中运行,这些字符将显示在最后一个帮助页面输出上cmd /? or help cmd.

但错误就在这里:

set value="Hello world"

等号后的第一个双引号是整个参数variable=value命令的set不包含在双引号中。

这会导致将双引号解释为字符串的一部分,以分配给具有名称的变量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和第一个双引号,
  • 第一个双引号,
  • 最后一个双引号,
  • 以及最后一个双引号后所有可能存在的空格/制表符。

So just Hello world被分配给一个名为 name 的变量value.

有关将字符串正确分配给环境变量的更多详细信息,请阅读答案为什么在命令行上使用“set var = text”后没有带有“echo %var%”的字符串输出? https://stackoverflow.com/a/26388460/3074564它还包含一个简单的演示批处理代码。

更多信息:

如何解释中间包含 1 个或多个引号的参数字符串取决于命令和应用程序。解释具有 1 个或多个参数的参数时的行为"参数字符串中的内容可能会根据所使用的编译器的不同而有所不同,如答案中所述批处理文件:列出特定文件夹中的rar文件并将结果写入文本文件 https://stackoverflow.com/a/24008269/3074564当然还有命令/应用程序的源代码。

对于大多数命令和应用程序,正确的语法是:

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

So explorer.exe要求在之后指定要打开的目录/e,参数字符串中间带引号或者它解释"/e,%CD%"分别"/e %CD%"作为目录名称以及要显示的路径Explorer window.

也可以看看SS64 - Windows 资源管理器命令行选项 https://ss64.com/nt/explorer.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何设置带空格的环境变量? 的相关文章

随机推荐