我如何理解3行批处理脚本?

Gtk*_*ker 1 syntax cmd batch-file

ECHO @ECHO OFF ^& (IF EXIST "%%~dp0%~n1.swf" (DEL "%%~dp0%~n1.swf")) ^& %mxmlcPath% %opts% -file-specs "%%~dp0%~nx1" ^& (IF EXIST "%%~dp0%~n1.swf" (CALL "%%~dp0%~n1.swf") ELSE (PAUSE)) > "%~dpn1.bat"
REM Immediately execute the generated bat
@ECHO on
CALL "%~dpn1.bat"
Run Code Online (Sandbox Code Playgroud)

这对我来说真是一团糟(比如ECHO @ECHO OFF,那是什么意思?),有人可以详细说明吗?

cha*_*lup 6

第一行生成批处理文件(注意'>'将输出重定向到第一行末尾的文件).第三行确保输出可见,第四行执行第一行生成的批处理文件.

至于生成的批处理的作用:它似乎重新创建了一些swf文件:首先删除了swf文件:

"(IF EXIST "%%~dp0%~n1.swf" (DEL "%%~dp0%~n1.swf"))" 
Run Code Online (Sandbox Code Playgroud)

然后使用mxmlcPath环境变量中定义的程序创建它:

%mxmlcPath% %opts% -file-specs "%%~dp0%~nx1"
Run Code Online (Sandbox Code Playgroud)

如果它已成功创建,则在默认的swf播放器中运行它:

(IF EXIST "%%~dp0%~n1.swf" (CALL "%%~dp0%~n1.swf")
Run Code Online (Sandbox Code Playgroud)

在其他情况下,它等待用户输入(因此您将能够读取所有错误消息等):

ELSE (PAUSE)
Run Code Online (Sandbox Code Playgroud)

几个Windows命令的文档中提供了所有"%~dp0"等语法的说明,例如:

call /?
Run Code Online (Sandbox Code Playgroud)