在Windows CMD文件中,斜杠后面的回显是什么?

时间:2017-01-06 21:37:54

标签: windows batch-file cmd echo

在检查这个Windows批处理/ CMD文件(来自Chocolatey源的RefreshEnv.cmd)时,我遇到了以下代码行:

echo/@echo off >"%TEMP%\_env.cmd"

上面创建文件 _env.cmd ,内容为" @echo off"。

斜线做什么" echo /"?如果我省略斜杠,结果文件完全相同。

我在Windows 7上。

1 个答案:

答案 0 :(得分:3)

首先,对于您的命令行,无论您是在撰写echo/@echo off还是echo @echo off,都只有文字@echo off回显。

紧跟/命令之后的echo字符有时用于回显空行,因为没有任何参数的echo会返回ECHO is on|off.之类的消息。一种非常常见的方法是编写echo.,尽管如果在当前工作目录中存在名为echo.(没有文件扩展名)的文件,这可能会失败,然后会无意中执行

通常,cmd中有以下字符在命令行中分隔标记,如命令及其参数: SPACE TAB ,;=和非中断空格(代码0xFF)。最常用的令牌分隔符(我强烈推荐)是 SPACE 。多个相邻的分隔符被视为单个分隔符。

还有一些字符似乎将命令与其参数分开:.:/\[,{{ 1}},]+,虽然这些字符似乎成为第一个参数的一部分。 (尝试(输入type+file.txt但不包含+file.txt的内容。)

然而,

file.txt似乎行为不同,因为并非所有令牌分隔符都被平等处理,并且上述将命令与其参数分开的附加字符不会被视为参数的一部分。这就是echo的行为方式:

  • echo后面没有任何内容,或后跟 SPACE TAB 或非中断空格,或由多个此类字符组成的字符串返回echo;
  • ECHO is on|off.后跟echo,;返回空行;
  • =后跟echo,;,后跟一个或多个令牌分隔符,返回这些令牌分隔符;
  • =后跟一个标记分隔符,后跟一个字符串,其中至少包含一个 SPACE TAB 以外的字符,非中断空格返回该字符串;
  • echo后跟echo.:/\[,{{1} }或]返回一个空行;
  • +后跟(echo.:/\,{{1} }或[,后跟任何其他内容,即使只是令牌分隔符,也会返回所说的任何内容;
  • 如果有名为]的文件+,则{li> (后跟echo.[]会失败分别是},+echo.;
  • echo[后跟echo]echo+也可能由于类似(但更复杂)的路径冲突而失败;
  • echo跟随\因路径冲突而无法失败,但如果以下文字以:开头,则会失败,因为echo被注意到,所以帮助文字是显示在控制台而不是给定的文本;
  • /后跟?,后跟任意文字,安全地返回上述任意文字;

因此,回应任意文本的唯一安全方法是使用/?。要返回空行,我更喜欢使用echo,因为它看起来不像(那么奇怪。

关于如何通过echo(命令安全地返回空行以及如何安全地使用echo/命令,DosTips上有一个很棒的主题。

注意echo(echoecho^&%!等字符{ {1}}和(需要正确转义才能由)正确返回;但是这是必要的,因为命令解释器<并且与>命令无关。