8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

为什么在 cmd 中使用 'set var = text' 命令后,'echo %var%' 没有字符串输出?

Nitori Kawashiro 1月前

33 0

我使用 set 命令在 cmd 中设置了一个变量,并尝试回显它。这里有一个示例:C:\Users\Logan>set var = textC:\Users\Logan>set varvar = textC:\Users\Logan>echo %var%%var%...

我使用命令在 cmd 中设置了一个变量 set ,并尝试 echo 这样做。

以下是一个例子:

C:\Users\Logan>set var = text

C:\Users\Logan>set var
var = text

C:\Users\Logan>echo %var%
%var%

C:\Users\Logan>

有没有办法强制将 cmd 设置为 echo 变量而不是原始文本?

帖子版权声明 1、本帖标题:为什么在 cmd 中使用 'set var = text' 命令后,'echo %var%' 没有字符串输出?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由Nitori Kawashiro在本站《file》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 您需要删除之前和之后的空格 =

    set "var=text"
    echo %var%
    text
    
  • @Logern 当您设置 var = text 时,您实际上是在创建一个名为 var 的变量(请注意 r 后面的空格)。

  • 为环境变量分配值/字符串

    最好使用启用命令扩展的以下语法来定义或修改环境变量:

    set "var=text"
    

    命令 设置完毕 ,参数为 "variable=value" .

    只要默认启用命令扩展,参数字符串就可以像所有命令一样用双引号引起来。

    如果未使用双引号 variable=value ,则命令 集会 将第一个等号后到行尾的所有内容(包括不可见的空格和行尾的水平制表符)解释为字符串值以分配给变量。

    变量的名称以第一个非空白字符(如果使用双引号,则在双引号后)开始,到第一个等号左侧结束。分配给变量的值从第一个等号右侧开始,到行尾或最后一个双引号结束。

    set VAR = TEXT
    

    上面的命令行创建一个名为 VAR Space 的,并将字符串Space TEXT 给该变量。

    使用

    set var="text"
    

    文本以及所有尾随空格和制表符的文本 var 分配给变量 var 如何设置带空格的环境变量? 的答案

    例子:

    @echo off
    setlocal EnableExtensions DisableDelayedExpansion
    set "var=text"
    set "var = text"
    set "var1=and more text"
    set var2="and more text"
    set var3="text with 1 trailing space" 
    set var
    echo var3=%var3%^<- Do you see the trailing space?
    echo/
    set UnwantedSpaceVar=Hello 
    echo %UnwantedSpaceVar%! ^<- Where does the space come from?
    echo/
    echo There is a trailing space after Hello in this code snippet.
    echo/
    set "TrailingSpacesIgnored=Hi"   
    echo %TrailingSpacesIgnored%! ^<- The 3 trailing spaces above are ignored.
    echo/
    endlocal
    pause
    

    运行此小批量代码将产生以下输出:

    var=text
    var = text
    var1=and more text
    var2="and more text"
    var3="text with 1 trailing space" 
    var3="text with 1 trailing space" <- Do you see the trailing space?
    
    Hello ! <- Where does the space come from?
    
    There is a trailing space after Hello in this code snippet.
    
    Hi! <- The 3 trailing spaces above are ignored.
    

    即使文本本身包含一个或多个双引号,也可以用引号 variable=value

    set "Quote=""
    

    值为的 Quote 变量 " 。命令 set 将第一个等号左到最后一个双引号之后的所有内容解释为值,并将其分配给名称位于第一个引号和第一个等号之间的变量。

    注意: inside 和 next " & 或 的 && 字符串值 || 甚至可能被 set "variable=value" 误解,从而导致意外行为,正如在运行以下两行批处理文件时看到的那样:

    @echo off
    set "Variable=Value with one double quote in the middle" & echo Oh, there is something wrong here!"
    

    Value ,并 one double quote in the middle" & 的另一个命令行 Oh, there is something wrong here! 是分配给环境变量的字符串,但分配给变量的只是 Value with one double quote in the middle 中间和之后 " 的行的其余部分, & 被解释为条件运算符,而不是字面上被解释为要执行的附加命令 cmd.exe && 之后 || 存在相同的问题, " 中间有 0 个或更多空格/制表符。 此问题不是由命令 set 的 。 它是由 Windows 命令处理器引起的,它将行拆分为带有 set 命令 echo with 有条件执行 echo echo 行。

    禁用命令扩展时的变量分配

    如果在批处理文件中禁用了命令扩展名(或在 Windows 注册表中禁用,这种情况非常少见,我从未在任何 Windows 计算机上见过),则无法使用 set "variable=value" 命令语法 setlocal DisableExtensions 。执行批处理文件时将导致语法错误。

    仅可以 set variable=value 在禁用命令扩展的情况下使用,此时值也可以包含双引号,并且必须注意尾随空格/制表符,因为它们也被分配给环境变量。

    在命令提示符窗口中运行 cmd /? setlocal /? 获取有关命令扩展以及哪些命令受命令扩展影响的更多信息。注意:受影响命令的输出列表未 退出, GOTO :EOF 返回到哪里? 的答案中所述。

    通过算术表达式赋值变量

    使用 带选项 /A 集会完全改变第二个参数的解析,即后面的字符串 set /A 。使用选项 /A 作为第一个参数时,第二个字符串被解释为 算术表达式 ,因此处理方式与将字符串值分配给环境变量完全不同。环境变量始终是字符串类型,而不是整数类型。

    该选项的使用 /A 需要启用命令扩展,否则命令将完全忽略该行的其余部分而不会出现任何错误消息。

    大多数情况下,不建议使用算术表达式将数字分配给环境变量,即使用 set /A var=1 . set "var=1" 或仅 set var=1 (并且没有尾随空格)会更快一些,因为环境变量始终是字符串类型。

    在算术表达式中,空格被解释为变量名、数字和运算符的分隔符。因此,命令行 set /A var = 为 不会 像上面那样定义 名为 Space 的变量,其字符串 (批处理文件包含 Space set var = 1 1。 set /A var = 1 VAR 字符串 1 转换 1 为值为整数并返回到具有两个值 0x31 和 0x00(以空值结尾的字符串)的字符串后,定义名为 VAR 的 1 1 1

    通过提示分配变量

    另外,使用选项的 /P 集会改变变量名和等号后的字符串的解析。变量名和等号后的字符串被解释为要输出的提示文本,而不是要分配给环境变量的字符串。

    环境变量被分配由提示用户输入的字符串(或从文件或命令/应用程序重定向),或者在用户在按下RETURNENTER,如果在提示之前未定义,则保持其当前值仍然未定义。

    该选项的使用 /P 需要启用命令扩展,否则命令将完全忽略该行的其余部分而不会出现任何错误消息。

    提示用户输入字符串的最常用语法是:

    set /P var="Please enter something: "
    

    命令 集会 在打印之前自动删除提示文本周围的双引号,以处理 STDOUT (如果未重定向,则为控制台窗口)。

    但工作也同样如此:

    set /P "var=Please enter something: "
    

    请阅读 此答案 以获取有关提示文本解析以及如何输出带有双引号的提示文本的更多详细信息。

  • 1. 对于语法 set \'VAR=Text\',您应该提到这仅在启用命令扩展的情况下才有效(另请参阅 cmd /? 和 setlocal /?)。2. 对于 set /P,最佳语法实际上是 set /P VAR=\'Please enter something: \',因为如果提示文本本身以引号开头,语法 set /P \'VAR=\' is banned: \' 可能会导致意外结果,而 set /P VAR=\'\' is banned: \' 则不会。

返回
作者最近主题: