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

标签 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上。

最佳答案

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

命令为,设置为,参数为variable=value。对于大多数命令和应用程序,如果包含一个或多个空格或此列表中的任何其他字符,则可能且经常需要用双引号将参数引起来:&()[]{}^=;!'+,`~。通过在命令提示符窗口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.exe /e,"%CD%"
    

    不工作的是:
    explorer.exe "/e,%CD%"
    explorer.exe /e "%CD%"
    

    因此,explorer.exe要求在要打开的目录之后在参数字符串中间用引号引起来的/e,之后指定它,或者将"/e,%CD%""/e %CD%"分别解释为要在资源管理器窗口中显示的目录名称。

    另请参见SS64 - Windows Explorer command-line options

    关于batch-file - 如何用空格设置环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34353504/

    相关文章:

    c++ - Windows Qt 调用批处理文件并退出应用程序

    将char数组转换成类似于int argc和char** argv的结构

    java - 通过命令行 cucumber maven

    windows - 使用带引号逗号的 Windows 命令行 FOR 命令

    Windows 批处理脚本使控制台窗口保持打开状态

    c# - 如何在 C# 中打开用于创建新文件的 UAC 窗口

    c++ - 访问外部窗口句柄

    c# - C# 应用程序中的 JumpList(最近的文件)

    python - 跨平台部署,安装方便

    command-line - 如何强制 vbs 脚本在 cscript 主机中运行