我注意到在一个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发布于 2017-06-14 09:08:39
REM是一个类似于ECHO的命令。在命令提示符窗口rem /?中运行以获得有关此命令的帮助。
Windows命令解释器首先像批处理文件中的所有其他行一样解析此命令行,但以冒号开头的行除外,这些行被解释为label行,而不是命令行。
因此,在执行%之前,单个被解释为环境变量或批处理文件参数引用的开始。由于此命令行中不再有百分比符号,因此删除了单个百分比符号。
%~在命令行解析中被解释为无效的批处理文件参数引用。对于命令解释器来说,命令不计算行的其余部分并不重要。首先,命令行是独立于命令进行解析的,接下来,无论命令是什么,命令都由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、命令行中,环境变量引用和批处理文件参数引用被环境变量和批处理文件参数的值替换。
发布于 2017-06-14 09:08:26
(最初)发布的代码不会导致错误。但这将:
REM %~ this will cause an error原因是,参数展开比注释具有更高的优先级,cmd.exe将首先尝试展开和删除此处未给出的参数,%~
发布于 2022-10-05 17:10:57
避免扩展REM语句参数的最佳方法是使用goto跳过它们。就像这样:
goto :afterREMS
REM following line with crash/exit the BAT script if processed
REM %~I - expands %I removing any surrounding quotes (")
:afterREMS编程已经有一段时间了,今天是我第一次被这个问题所困扰。我认为在我的BAT中记录所有不同的宏展开是很方便的,但是我遇到了这个问题。
https://stackoverflow.com/questions/44540037
复制相似问题