我有一个很长的命令行字符串,我想注释一些参数/开关并描述它们的作用以及可以用它们进行哪些调整。以下简化的批处理文件不起作用,但它或多或少是我想要做的:
executable^
-switch1=3^ rem should be 3 or 5, three means xxx and 5 means yyy
-argument1=some-file.txt^
-file-format=csv^ rem output file format, supported are csv and xml
-out=result rem written file, file extension is copied from file format
我创建了一个简单的脚本来测试将注释与拆分命令字符串组合的语法,但我找不到可行的解决方案:
rem WORKS, no space after caret
echo aaa ^
bbb
rem does not work, space after caret
echo aaa ^
bbb
rem WORKS space in the next line
echo aaa ^
bbb
echo(
echo and now with rem-comments
echo(
rem does not work
echo aaa ^rem comment
bbb
rem does not work
echo aaa ^&rem comment
bbb
rem does not work
echo aaa ^ rem comment
bbb
rem does not work
echo aaa ^ &rem comment
bbb
echo(
echo and with double-colon-comments
echo(
:: does not work
echo aaa ^:: comment
bbb
:: does not work
echo aaa ^&:: comment
bbb
:: does not work
echo aaa ^ :: comment
bbb
:: does not work
echo aaa ^ &:: comment
bbb
插入符号后的任何字符似乎都会破坏它,因此在插入符号后可能根本无法添加内联注释?有人有想法/解决方案吗?
您可以使用百分比注释。
它们会从行中完全消失,因此不会造成干扰。
它之所以有效,是因为解析器会尝试将注释扩展为变量,但如果找不到这样的变量,它就会扩展为空字符串。
因此,您应该以 开头
%=
,因为不能以等号开头创建变量。重要的是不要在注释中包含冒号,因为它们被视为特殊的变量修改运算符,并会完全破坏注释。
百分比注释几乎可以在行中的任何位置使用。
不可能将命令(例如命令
rem
内部的命令)分散到多行。行尾的脱字符作为转义字符只有在有下一个回车符(自动读取批处理文件时忽略)和换行符时才有效。即使是尾随空格字符(例如普通空格或水平制表符)也会导致将长命令行拆分为两个命令行,并且可执行文件的执行将无法按预期进行。Windows命令处理器使用非常古老的语法,不像现代脚本解释器那样容忍空格/制表符。有关命令行或批处理文件处理的更多信息,请参阅:Windows 命令解释器 (CMD.EXE) 如何解析脚本?^
解决方案很简单。长命令行在批处理文件中被写成一个长命令行,并且所有选项都在上面的一个块中进行了解释,而使用下面演示的命令执行时,该块或多或少会被忽略
goto
。你原来的概念是错误的,因为
^
行尾字符必须放在行尾......我提出了一种不同的方法,该方法在注释中使用冒号不会出现任何问题:
\n
在此方法中,首先创建一个“行尾”变量,并将其放置在组成命令的每一行的末尾。每行都通过for /F
命令进行处理,并用于组装最终命令。“注释部分”通过 FOR /F 命令部分中包含的斜线分隔delims=/
。您还可以使用大写“R”作为注释分隔符,并使用命令分隔注释REM
。执行的命令是这样的:
这种方法的唯一缺点是等号必须进行
^=
转义,因为解析器会删除它们。