我注意到在Windows批处理文件中,即使您快速删除%〜也会收到错误消息

For valid formats type CALL /? or FOR /?
The syntax of the command is incorrect.

为什么注释行不被忽略?
@ ECHO OFF
REM Blah blah blah
REM %~ this will cause an error
REM %%~ Double the fun, no error

最佳答案

REM 是类似于 ECHO 的命令。在命令提示符窗口rem /?中运行以获取有关此命令的帮助。

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

因此,在完全执行 REM 之前,将一个%解释为环境变量或批处理文件参数引用的开始。因为该命令行上没有更多的百分号,所以删除了单个百分号。
%~在命令行解析中被解释为无效的批处理文件参数引用。对于Windows命令解释器,命令 REM 不评估该行的其余部分并不重要。首先,命令行独立于命令进行解析,然后无论命令是什么,都由cmd.exe执行命令。

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

有关批处理脚本解析的详细信息,请参见How does the Windows Command Interpreter (CMD.EXE) parse scripts?

例子:

REM User name: %USERNAME%
REM User profile directory: %USERPROFILE%
REM Application data directory: %APPDATA%
REM Batch arguments: %0 %*
PAUSE

在运行这些批处理文件时,那些 REM 命令行中的环境变量引用和批处理文件参数被替换为环境变量的值和批处理文件参数,而顶部没有@ECHO OFF

关于windows - REM语句中的%〜,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44540037/

10-14 18:36