@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上。
#1 楼
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将错误引用的参数解释为语法错误。 br />
更正将使用:
set "value=Hello world"
现在命令集的整个参数都用双引号引起来。因此,在解析该行时会忽略以下内容:
命令集和第一个双引号之间的所有空格/制表符,
第一个双引号,
最后一个双引号,
以及最后一个双引号之后的所有可能存在的空格/制表符。
因此,仅将
Hello world
分配给名称为value
的变量。有关正确的更多详细信息将字符串分配给环境变量,请阅读以下答案:为什么在命令行上使用“ set var = text”后,没有显示“ echo%var%”的字符串?它还包含一个简单的演示批处理代码。
更多信息:
如何解释在中间某处包含1个或多个引号的参数字符串取决于命令和相应的应用程序。解释在参数字符串中包含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资源管理器命令行选项。
评论
%srijani%和%value%变量的值是什么。经常犯的标准错误是使用set variable =“ value”而不是set“ variable = value”。例如,请参阅为什么在命令行上使用“ set var = text”后为什么没有带有“ echo%var%”的字符串输出?有关使用命令SET在行上指定第一引号的区别的说明。
@Mofi-实际上就是答案...
Mofi建议的一个很大的优点是,设置“ variable = value”时,该值中不包含周围的引号,因此,仅当扩展(读取)“%variable%”之类的值时,才需要关心它们。在报价方面变得更加一致...