为什么在cmd中输入一个“^”会问我更多的问题?那就什么都不要做

为什么在cmd中输入一个“^”会问我更多的问题?那就什么都不要做,cmd,windows-10,command,special-characters,Cmd,Windows 10,Command,Special Characters,我试着用谷歌搜索这个并搜索堆栈溢出,但它没有返回任何有用的结果 ^symbol的作用是什么?为什么要求我更多? 还有什么?更多信息?更具体?还要烤鸭吗 一次输入^加上按输入键返回 的两个独立行问题 更多信息? 更多信息? 为什么是两个? 输入双精度^^时返回, “^”未被识别为内部或外部命令 为什么它也只返回一克拉 在第一种情况下,单个克拉返回一个非空或未定义的值 而第二个可能是未定义的 非常简短的问题。 我的问题可能是这个问题的重复: 但是仍然对屏幕截图中最后一个命令的输出感到困惑。插入符

我试着用谷歌搜索这个并搜索堆栈溢出,但它没有返回任何有用的结果
^symbol的作用是什么?为什么要求我更多?
还有什么?更多信息?更具体?还要烤鸭吗

一次输入
^
加上按输入键返回

的两个独立行问题
更多信息?

更多信息?

为什么是两个?
输入双精度
^^
时返回,
“^”未被识别为内部或外部命令

为什么它也只返回一克拉

在第一种情况下,单个克拉返回一个非空或未定义的值
而第二个可能是未定义的

非常简短的问题。

我的问题可能是这个问题的重复:

但是仍然对屏幕截图中最后一个命令的输出感到困惑。

插入符号的第一个(
^
)是cmd的转义字符,当用作行上的最后一个字符时,它会删除行的结尾并追加下一行并转义第一个字符

第二,与流行的观点相反,您可以将多行命令写入cmd提示符,通常是通过将命令包装在括号中来完成。 例如:

c:\>@(
更多?echo,你好
更多?回声,在那里
更多?)
---[输出]---
你好
那里
另一种方法是使用行末尾的插入符号

当第1行的最后一个字符是插入符号时,这意味着行尾未被处理(从技术上讲,它与插入符号一起被删除),第2行的第一个字符将被转义

因此,在第二行,如果您只点击“回车”(回车),它将被转义,然后您将得到第二行
more?
,因为该行现在也将被附加到第一行

然而,您只转义了第二个EOL,这意味着这是一种将回车保存到变量中的方法。但是,仅当启用了延迟扩展时,使用变量回显行才有效

因此,例如,在CLI上这样做很好:

c:\>echo.this^
更多那
---[结果]---
这个和那个
您还可以在CLI上使用此选项设置变量,而不必考虑回车问题

c:\>Set var=Some^
更多正文
c:\>echo%var%
---[结果]---
一些文本
如前所述,如果回显,^是行的最后一个字符,并且您在第一个
more?
上按enter键,您仍然可以向行写入更多内容,并显示它,包括回车符。这项工作不会延迟扩展

c:\>echo.this^
更多
更多那
---[结果]---
这
那
但是,尽管您可以如上所述在CLI上保存变量,但在尝试
echo
it时,将显示以下行为:

c:\>Set var=Some^
更多
更多正文
c:\>echo%var%
---[结果]---
一些
这是因为即使没有延迟扩展,以这种方式保存变量也可以工作,但是要通过EOL字符返回值,则需要启用延迟扩展

但是,我们可以看到,它是使用
SET

c:\>Set var=Some^
更多
更多正文
c:\>设置变量
---[结果]---
var=一些
正文
因此,您仍然可以通过
FOR
循环将其取出,或者您需要打开延迟扩展,这可以通过使用
/V
选项启动
CMD
来完成

因此,这个简单的
for
循环将起作用,但仅当变量中存储的字符串中没有空格或逗号时

因此,这将起作用:

c:\Set var=此\u没有…空格^
更多
更多在它里面
c:\>对于(%var%)DO@(ECHO.%~A)中的%A
---[结果]---
这个没有…空格
在它里面
但这不会得到你想要的:

c:\>Set var=更多文本^
更多
更多去这里
c:\>对于(%var%)DO@(ECHO.%~A)中的%A
---[结果]---
一些
更多
文本
去
在这里
但是,如前所述,
SET
确实显示回车符,因此您可以使用
FOR/F
循环将两行取出:

c:\>Set var=更多文本^
更多
更多去这里
c:\>for/F“Tokens=*%A IN('SET VAR')DO@(ECHO.%~A)
---[结果]---
var=更多的文本
去这里
但是现在我们仍然在开头有
var=
,所以我们真的不希望这样,这意味着我们需要在变量的开头有一个额外的回车,并跳过第1行,得到如下结果:

c:\>设置变量=^
更多
更多这里有一些文字^
更多
更多也在这里
c:\>for/F“Tokens=*SKIP=1”%A IN('SET VAR')DO@(ECHO.%~A)
---[结果]---
这里有一些文字
也在这里
因此,实现这一点的最简单方法是启用延迟扩展,并像通常那样使用echo:

c:\>Set var=Some^
更多
更多正文
c:\>cmd/V
c:\>回声!瓦尔!
---[结果]---
一些
正文

这是否回答了您的问题?