在Windows CMD文件中,回显后面紧跟着一个斜杠?

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

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

上面创build文件_env.cmd与内容“@echo off”。

斜杠在“echo /”中做了什么? 如果我省略了斜线,结果文件完全一样。

我在Windows 7上。

首先,对于你的命令行来说,不管你是写echo/@echo off还是echo @echo off都没有echo/@echo off

紧接在echo命令之后的一个字符有时用来回显一个空行,因为没有任何参数的echo返回一个消息,比如ECHO is on|off. 。 一个很常见的方法就是写echo. ,但是如果有一个叫做echo.的文件,这可能会失败echo. (没有文件扩展名)在当前的工作目录,然后会被无意地执行。


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

还有更多的人物似乎将命令与其参数分开: .:/\[]+(尽管这些字符似乎成为第一个参数的一部分,然后(尝试type+file.txt的内容,而不是file.txt 。)


然而, echo似乎行为不同,因为并不是所有的标记分隔符都是相同的处理方式,前面提到的将命令与其参数分离的附加字符不作为参数的一部分。 这是echo如何表现:

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

所以唯一安全的方法就是使用echo( 。为了返回一个空行,我更喜欢使用echo/ ,因为它看起来不像echo(

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

关注那些像^&% !()<>| 需要正确转义才能被echo正确返回; 但是这是必要的,因为命令解释器cmd并且与echo命令无关。