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 上。
首先,对于您的命令行,无论您是在书写echo/@echo off
还是echo @echo off
,都绝对没有区别,只是@echo off
回显了文本。
甲/
立即以下字符echo
的命令有时被用于回声一个空行,由于echo
没有任何参数返回这样的消息ECHO is on|off.
。一种非常常见的方法是 write echo.
,尽管如果echo.
当前工作目录中有一个名为(没有文件扩展名)的文件,这可能会失败,然后无意中执行。
在一般情况下,有在以下的字符cmd
,其在命令行上分隔标记,如命令和其参数:SPACE,TAB,,
,;
,=
和非休息空间(代码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
后跟一个标记分隔符,后跟一个包含至少一个除 之外的字符的字符串SPACE,TAB并且不间断空格返回该字符串;echo
后跟.
, :
, /
, \
, [
, ]
,+
或(
返回空行;echo
后跟.
, :
, /
, \
, [
, ]
, +
or (
,后跟其他任何内容,甚至仅标记分隔符,返回所说的任何内容;echo
后跟.
, [
,]
或+
失败,如果分别有名为echo.
, echo[
,echo]
和的文件echo+
;echo
随后\
或:
也可能由于类似(但更复杂)的路径冲突而失败;echo
/
由于路径冲突,followed不会失败,但如果后面的文本以 开头则失败?
,因为/?
注意到了,所以在控制台中显示帮助文本而不是给定的文本;echo
后跟(
, 后跟任意文本安全地返回所述任意文本;因此,回显任意文本的唯一安全方法是使用echo(
. 对于返回一个空行,我更喜欢使用echo/
,因为它看起来不像echo(
.
DosTips上有一个关于如何通过echo
命令安全地返回空行以及如何echo
安全地使用命令的主题。
请注意像^
, &
, %
, !
, )
, <
,>
和等字符|
需要正确转义才能正确返回echo
; 然而,这是必要的,因为命令解释器cmd
与命令无关echo
。