为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

如何用空格设置环境变量?我需要使用批处理文件将值设置为环境变量。我为此写了剧本:@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上。
查看完整描述

2 回答

?
慕丝7291255

TA贡献1859条经验 获得超6个赞

按命令输出的错误SETX是由于错误地使用引号将字符串赋值给变量造成的。value.

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

但这是错误的:

set value="Hello world"

在等号后面加上第一个双引号,整个参数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"

现在命令的整个参数用双引号括在一起。因此,在分析行时忽略了以下内容:

  • 命令之间的所有空格/制表符

    第一个双引号,
  • 第一个双引号,
  • 最后一句双引号,
  • 和所有可能存在的空格/制表符后,最后双引号。

所以.Hello world分配给具有名称的变量。value.

有关将字符串正确分配给环境变量的详细信息,请阅读为什么在命令行上使用‘set var=text’之后没有带有‘echo%var%’的字符串输出?它还包含一个简单的演示批处理代码。

更多信息:

在中间某个位置包含一个或多个引号的参数字符串是如何解释的,这分别取决于应用程序的命令。用1或更多解释论点的行为"在参数字符串中,可以根据使用的编译器而变化,如批处理文件:列出特定文件夹中的rar文件,并将结果写入文本文件。当然还有命令/应用程序的源代码。

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

command "parameter in quotes"
"Path to application\app.exe" "parameter in quotes"

但是,有些应用程序需要参数字符串中间的引号。这样的应用程序的一个例子是Windows资源管理器.

打开探险家窗口中显示当前目录的批处理文件中的。

explorer.exe /e,"%CD%"

不工作的有:

explorer.exe "/e,%CD%"
explorer.exe /e "%CD%"

所以explorer.exe要求在之后指定要打开的目录。/e,在参数字符串中间加上引号,或者解释"/e,%CD%"分别"/e %CD%"作为要显示路径的目录的名称。探险家窗户。

另见SS64-Windows Explorer命令行选项.


查看完整回答
反对 回复 2019-07-02
?
米脂

TA贡献1836条经验 获得超3个赞

SETX foo“\”这个env var在每个末尾都有空格和双引号\“


查看完整回答
反对 回复 2019-07-02
  • 2 回答
  • 0 关注
  • 871 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信