在 Windows CMD 文件中,后跟斜杠的 echo 有什么作用?

Sab*_*ncu 2 windows cmd batch-file echo

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

echo/@echo off >"%TEMP%\_env.cmd"
Run Code Online (Sandbox Code Playgroud)

以上创建文件_env.cmd内容为“@echo off”。

斜线在“echo/”中有什么作用?如果我省略斜杠,则生成的文件完全相同。

我在 Windows 7 上。

asc*_*pfl 5

首先,对于您的命令行,无论您是在书写echo/@echo off还是echo @echo off,都绝对没有区别,只是@echo off回显了文本。

/立即以下字符echo的命令有时被用于回声一个空行,由于echo没有任何参数返回这样的消息ECHO is on|off.。一种非常常见的方法是 write echo.,尽管如果echo.当前工作目录中有一个名为(没有文件扩展名)的文件,这可能会失败,然后无意中执行。


在一般情况下,有在以下的字符cmd,其在命令行上分隔标记,如命令和其参数:SPACETAB,;=和非休息空间(代码0xFF)。最常用的标记分隔符(我强烈推荐)是SPACE. 多个相邻的分隔符被视为一个分隔符。

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


echo然而似乎表现不同,因为并非所有标记分隔符都被同等处理,并且上述将命令与其参数分开的附加字符不被视为参数的一部分。这是echo行为方式:

  • echo后跟无,或后跟 a SPACE, aTAB或非中断空格,或由多个此类字符组成的字符串返回ECHO is on|off.
  • echo后跟 a ,、 a;或 an=返回空行;
  • echo后跟 a ,、 a;或 an =,后跟一个或多个标记分隔符返回这些标记分隔符;
  • echo后跟一个标记分隔符,后跟一个包含至少一个除 之外的字符的字符串SPACETAB并且不间断空格返回该字符串;
  • echo后跟., :, /, \, [, ],+(返回空行;
  • echo后跟., :, /, \, [, ], +or (,后跟其他任何内容,甚至仅标记分隔符,返回所说的任何内容;
  • echo后跟., [,]+失败,如果分别有名为echo., echo[,echo]和的文件echo+
  • echo随后\:也可能由于类似(但更复杂)的路径冲突而失败;
  • echo/由于路径冲突,followed不会失败,但如果后面的文本以 开头则失败?,因为/?注意到了,所以在控制台中显示帮助文本而不是给定的文本;
  • echo后跟(, 后跟任意文本安全地返回所述任意文本;

因此,回显任意文本的唯一安全方法是使用echo(. 对于返回一个空行,我更喜欢使用echo/,因为它看起来不像echo(.

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

请注意像^, &, %, !, ), <,>和等字符|需要正确转义才能正确返回echo; 然而,这是必要的,因为命令解释器cmd与命令无关echo