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

斯里贾尼·戈什

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

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

莫菲

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

设置命令,参数为variable=value对于大多数命令和应用程序很可能和通常需要如果包含1个或多个空格或从该列表中的任何其它字符包围参数加上双引号:&()[]{}^=;!'+,`~通过在命令提示符窗口cmd /?或中运行,这些字符将显示在最后的帮助页面输出中help cmd

但是这里是错误的:

set value="Hello world"

等号后的第一个双引号不会variable=value将命令的整个参数括在双引号中。

这导致将双引号解释为字符串的一部分,以分配给具有name的变量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将其分配给具有name的变量value

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

更多信息:

如何解释在中间某处包含1个或多个引号的参数字符串取决于命令和应用程序。解释"在参数字符串中带有1个或多个参数的参数的行为可能会因所使用的编译器而异,如批处理文件中的答案所述:在特定文件夹中列出rar文件并将结果写入文本文件,当然还有命令的源代码/ 应用。

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

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%"目录的名称,并在Explorer窗口中显示路径

另请参见SS64-Windows Explorer命令行选项

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章