为什么没有字符串输出与“回声%VAR%”在cmd中使用“设置VAR =文本”命令后? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么没有字符串输出与“回声%VAR%”在cmd中使用“设置VAR =文本”命令后? [重复]相关的知识,希望对你有一定的参考价值。

这个问题已经在这里有一个答案:

余与set命令CMD设置一个变量,并试图echo它。

下面是一个例子:

C:UsersLogan>set var = text

C:UsersLogan>set var
var = text

C:UsersLogan>echo %var%
%var%

C:UsersLogan>

有没有办法迫使cmd以echo变量,而不是原始文本?

答案

你需要从等号带来更接近你的文字:

set var=text
echo %var%
text
另一答案

Assigning a value/string to an environment variable

使用命令扩展为默认启用最好是使用:

set "var=text"

该命令被设置和参数是"variable=value"

参数字符串可以包含在双引号作为所有只要命令扩展为默认启用命令。

如果双引号不围绕variable=value使用,命令集的第一等号包括不可见的空间,并在线路作为字符串值的结束水平制表符分配给可变后解释的一切线的端部。

变量的名称与第一个非空格字符开始(双引号后如果使用的话),并结束从左第一等号。分配给变量的值开始第一等号的右侧和在线或最后双引号的结束时结束。

set VAR = TEXT

创建了名称VARSpace一个环境变量和字符串SpaceTEXT分配给这个变量。

还使用

set var="text"

往往是不正确,因为这会导致分配给变量var与包括引号和所有尾随空格和制表符的文本。现在引用与周围的引号另一个代码行var经常导致错误消息作为变量保存本身就已经带有引号的文本。欲了解更多详情,请参见上How to set environment variables with spaces?答案

例:

@echo off
setlocal
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即使文本本身含有1个或多个双引号来完成。

set "Quote=""

此行定义的变量Quote用值"。命令集解释一切后,第一个等号左边持续双引号的值赋给变量与第一次报价和第一等号之间的名字。

注:"内和明年&&&一个字符串值,或||可以甚至曲解set "variable=value"的使用等导致,因为它可以运行一个批处理文件与以下两行可以看到意外的行为:

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

Value with one double quote in the middle" & echo Oh, there is something wrong here!是分配给环境变量的字符串,但分配给该变量只是Value with one double quote in the middle和中间"后,该行的其余部分和&解释为有条件的经营者,而不是之后字面上解释为附加命令由cmd.exe执行。同样的问题与0之间或多个空格/选项卡的&&||"存在。这个问题不是由指令集而引起的。它是由Windows命令处理器其将排队到命令行与组和一个更加命令行与回波与回波命令行的conditional execution引起的。

Variable assignment with disabled command extensions

如果命令扩展与批处理文件set "variable=value"禁用命令语法setlocal DisableExtensions不能使用(或在Windows注册表中是非常少见,从来没见过通过我的任何Windows电脑上)。语法错误,将是对批处理文件的执行结果。

它是唯一可能与禁用由此值也包含双引号和必须小心在尾随空格/制表符,因为它们也被分配到环境变量命令扩展使用set variable=value

在命令提示窗口cmd /?运行和setlocal /?有关命令扩展和其命令由命令扩展影响的更多信息。注:作为Where does GOTO :EOF return to?在答案中描述受影响的命令的输出列表错过出口

Variable assignment via arithmetic expression

使用命令选项/A变化完全第二个参数的解析,即set /A后的字符串设置。与选项/A作为第一个参数的第二字符串被解释为算术表达式,并因此被处理比以环境变量分配一个字符串值完全不同。环境变量始终是字符串类型的,从来没有整数类型。

选项/A的使用需要启用命令扩展,因为否则命令集忽略行的其余部分完全没有任何错误信息。

它是在不推荐使用set /A var=1只是分配使用的算术表达式的数环境变量,即多数情况下。 set "var=1"或只是set var=1(并且没有尾部空格)是快一点点,因为环境变量都是字符串类型的始终。

在一个算术表达式的空格都被解释为定界符变量名称,号码和操作符。由于这个原因,命令行set /A var = 1没有定义与名称VARSpace可变与串空间1作为set var = 1一样。 set /A var = 1定义了从串转换1(批处理文件包含1作为具有十六进制代码值31字符)与值1整数和回字符串与所述两个值0X31和0×00(串终止空后,用名VAR与字符串值1的可变)。

Variable assignment via a prompt

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

环境变量被分配通过提示用户输入(或从文件或命令/应用重定向)的字符串,或者在用户的情况下按压RETURN之前不输入任何或ENTER,保持其电流值分别是仍然未定义如果之前没有定义提示。

选项/P的使用需要启用命令扩展,因为否则命令集忽略行的其余部分完全没有任何错误信息。

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

set /P var="Please enter something: "

该指令集在这种情况下,打印处理STDOUT(如果不是重定向控制台窗口)之前将围绕自动提示文本的双引号。

但工作也是:

set /P "var=Please enter something: "

有关提示文本解析和如何输出与周围的双引号提示文本的详细信息,请阅读this answer

以上是关于为什么没有字符串输出与“回声%VAR%”在cmd中使用“设置VAR =文本”命令后? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥在cmd中使用'set var = text'命令后没有'echo %var%'的字符串输出? [复制]

我正在使用来自 python 的 powershell 命令获取一些数据,而 Windows 中没有 cmd!如何将此输出分配给字符串变量?

当我的 Perl 程序在 cmd.exe 中输出 UTF-8 编码字符串时,为啥我会重复最后一个八位字节?

为啥以下 Hello World 程序在 PowerShell 上没有显示任何输出?相同的程序在 CMD 上显示正确的输出

输入与输出

有没有办法连接两个开放的CMD窗口;一个用于输入命令,另一个用于显示相应的输出?