REM语句中的%〜

Mr *_*est 4 windows batch-file

我注意到在windows批处理文件中,即使你退出%〜你也会得到错误

For valid formats type CALL /? or FOR /?
The syntax of the command is incorrect.
Run Code Online (Sandbox Code Playgroud)

为什么注释行不被忽略?

@ ECHO OFF
REM Blah blah blah
REM %~ this will cause an error
REM %%~ Double the fun, no error
Run Code Online (Sandbox Code Playgroud)

Mof*_*ofi 5

REM是像ECHO这样的命令.在命令提示符窗口中运行rem /?以获取有关此命令的帮助.

Windows命令解释器首先像批处理文件中的所有其他行一样解析此命令行,但以冒号开头的行除外,这些行被解释为标签行而不是命令行.

因此,%在执行REM之前,单个被解释为环境变量或批处理文件参数引用的开头.删除单个百分号,因为此命令行上没有更多百分号.

%~在命令行解析时解释为无效的批处理文件参数引用.REM命令不评估该行的其余部分对于Windows命令解释器无关紧要.首先,命令行独立于命令解析,然后命令由命令执行cmd.exe.

删除第一行@ ECHO OFF,可以看到每个命令行在被Windows命令解释器解析后如何执行.以冒号开头的行不会被输出为解释为标签行而不是命令行.

有关批处理脚本解析的详细信息,请参阅Windows命令解释程序(CMD.EXE)如何解析脚本?

例:

REM User name: %USERNAME%
REM User profile directory: %USERPROFILE%
REM Application data directory: %APPDATA%
REM Batch arguments: %0 %*
PAUSE
Run Code Online (Sandbox Code Playgroud)

这些REM命令行中的环境变量引用和批处理文件参数引用将替换为环境变量的值和运行此批处理文件的批处理文件参数,而不是@ECHO OFF顶部.