How to “comment-out” (add comment) in a batch/cmd?
我有一个批处理文件,它运行一些可以修改表的python脚本。
我想让用户评论他们不想运行的1-2个python脚本,而不是将它们从批处理文件中删除(这样下一个用户就知道这些脚本作为选项存在!)
我还想添加注释以引起他们的注意,特别是在运行批处理文件之前,他们需要在批处理文件中更新的变量。我看到我可以使用
是否有更合适的语法来添加注释?
1 2 | :: commenttttttttttt REM commenttttttttttt |
但是(如人们所说):
- 如果使用inline,则需要添加
& 字符:your commands here & :: commenttttttttttt - 在嵌套逻辑(
IF/ELSE 、FOR 循环等)中使用REM ,因为:: 给出了错误。 :: 可能在setlocal ENABLEDELAYEDEXPANSION 内失效。
因此,在批处理文件中,可以使用以下命令:
1 2 3 4 | @echo off REM To skip the following Python commands, put"REM" before them: python foo.py python bar.py |
不,普通的旧批处理文件使用
要"注释掉"文件的各个部分,可以使用
1 2 3 4 5 6 7 8 9 10 11 12 | REM it starts here the section below can be safely erased once the file is customised ECHO Hey you need to edit this file before running it! Check the instructions inside ECHO Now press ctrl-c to interrupt execution or enter to continue PAUSE REM erase the section above once you have customised the file python executed1.py ECHO Skipping some stuff now GOTO End python skipped1.py python skipped2.py :END python executed2.py |
我能说什么?批处理文件是很久以前的遗物,它们笨重难看。
您可以在本网站上阅读更多内容。
编辑:稍微修改示例,使其包含您显然要查找的元素。
在计算机速度不太快的时候,最好使用::而不是REM。读取删除的行,然后忽略。::'ed行一直被忽略。这可以在"旧时代"中加速您的代码。在REM之后,你需要一个空间,在::之后,你不需要。
正如第一条评论中所说:你可以将信息添加到任何你认为需要的行中
1 | SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS |
至于零件的跳过。把REM放在每一行前面是相当耗时的。如前所述,使用goto跳过部分是跳过大块代码的简单方法。请确保在希望代码继续的位置设置:标签。
1 2 3 4 5 6 7 8 9 10 | SOME CODE GOTO LABEL ::REM OUT THIS LINE TO EXECUTE THE CODE BETWEEN THIS GOTO AND :LABEL SOME CODE TO SKIP . LAST LINE OF CODE TO SKIP :LABEL CODE TO EXECUTE |
多行批注
如果有大量的行需要注释,那么最好是多行注释而不是每行注释。
批处理语言没有注释块,尽管有实现效果的方法。
1 2 3 4 5 | GOTO EndComment1 This line is comment. And so is this line. And this one... :EndComment1 |
您可以使用
或者,如果注释块出现在批处理文件的末尾,则可以在代码末尾写入
1 2 3 4 5 6 7 8 9 10 11 | @ECHO OFF REM Do something ? ? REM End of code; use GOTO:EOF instead of EXIT for Windows NT and later EXIT Start of comment block at end of batch file This line is comment. And so is this line. And this one... |
评论来源
使用命令在同一行添加注释:使用
1 2 3 | color C & :: set red font color echo IMPORTANT INFORMATION color & :: reset the color to default |
说明:
此带有注释的语句看起来直观正确:
1 | goto error1 :: handling the error |
但它不是对注释的有效使用。它之所以起作用,是因为
1 | goto error1 handling the error |
但同样的尝试
1 | color 17 :: grey on blue |
由于
它只能在以下情况下工作:
1 | color 17 & :: grey on blue |
因此,符号是不可避免的。
你可以用
1 2 | your commands here :: commenttttttttttt |
或
1 2 | your commands here REM commenttttttttttt |
nbsp;
要在命令的同一行上执行此操作,必须添加一个和号:
1 | your commands here & :: commenttttttttttt |
或
1 | your commands here & REM commenttttttttttt |
nbsp;
注:- 在嵌套逻辑(
IF-ELSE 、FOR 循环等)中使用:: 会导致错误。在这些情况下,使用REM 。
这是一个古老的主题,我想在此添加我的理解,以扩展这个有趣主题的知识。
REM和::的主要区别在于:
REM本身是一个命令,而::不是。
我们可以将::视为一个标记,只要cmd解析器遇到一行中的第一个非空格就是这个::标记,它将跳过整行并读取下一行。这就是为什么REM后面应该至少有一个空格,以便能够作为行的注释,而::后面不需要任何空格。
REM本身就是一个命令,从下面的语法中可以很好地理解它。
基本语法如下
1 | FOR %v in (set) DO <Command> [command param] |
这里,
1 | FOR %i in (1,2,3) DO rem echo %i |
但是,由于
1 | FOR %i in (1,2,3) DO :: echo %i |