在检查这个Windows批处理/ CMD文件(来自Chocolatey源的RefreshEnv.cmd)时,我遇到了以下代码行:
echo/@echo off >"%TEMP%\_env.cmd"
上面创建文件 _env.cmd ,内容为" @echo off"。
斜线做什么" echo /"?如果我省略斜杠,结果文件完全相同。
我在Windows 7上。
答案 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(
,echo
,echo
,^
,&
,%
,!
等字符{ {1}}和(
需要正确转义才能由)
正确返回;但是这是必要的,因为命令解释器<
并且与>
命令无关。