REM语句中的%〜

时间:2017-06-14 08:55:36

标签: windows batch-file

我注意到在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

2 个答案:

答案 0 :(得分:5)

REM ECHO 之类的命令。在命令提示符窗口udp.xml中运行以获取有关此命令的帮助。

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

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

%在命令行解析时被解释为无效的批处理文件参数引用。对于Windows命令解释程序,命令 REM 不评估该行的其余部分无关紧要。首先,命令行独立于命令解析,然后命令由%~执行,无论命令是什么。

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

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

示例:

@ ECHO OFF

环境变量引用和那些 REM 命令行中的批处理文件参数引用被替换为环境变量的值和运行此批处理文件时的批处理文件参数REM User name: %USERNAME% REM User profile directory: %USERPROFILE% REM Application data directory: %APPDATA% REM Batch arguments: %0 %* PAUSE 在顶部。

答案 1 :(得分:4)

(最初)发布的代码不会导致错误。 但这会:

REM %~ this will cause an error

原因是参数扩展的优先级高于注释,cmd.exe将首先尝试展开并取消引用未给定的参数%~