我有一个批处理文件,该文件运行几个进行表修改的python脚本。
我想让用户注释掉他们不想运行的1-2个python脚本,而不是从批处理文件中删除它们(因此下一个用户知道这些脚本作为选项存在!)
我还想添加注释以引起他们的注意,特别是在运行批处理文件之前需要更新的变量。我看到我可以使用
REM
。但是,这似乎更多是为了在用户运行后更新进度。
是否有语法可以更适当地添加注释?
Rem Sth
命令或使用该商标::: Sth
我有一个批处理文件,该文件运行几个进行表修改的python脚本。
我想让用户注释掉他们不想运行的1-2个python脚本,而不是从批处理文件中删除它们(因此下一个用户知道这些脚本作为选项存在!)
我还想添加注释以引起他们的注意,特别是在运行批处理文件之前需要更新的变量。我看到我可以使用REM
。但是,这似乎更多是为了在用户运行后更新进度。
是否有语法可以更适当地添加注释?
Rem Sth
命令或使用该商标::: Sth
Answers:
该rem
命令确实是在征求意见。运行脚本后,它不会固有地更新任何人。不过,有些脚本作者可能会用它代替echo
,而是使用它,因为默认情况下,批处理解释器会在处理每个命令之前将其打印出来。由于rem
命令不执行任何操作,因此可以安全打印而不会产生副作用。为避免打印命令,请在命令前面加上@
,或在整个程序中应用该设置,请运行@echo off
。(这是echo off
为了避免再打印命令;@
是为了避免在回显设置生效之前打印该命令。)
因此,在批处理文件中,您可以使用以下命令:
@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py
REM This whole line is a comment
@echo off :: This comment is inline
#
之所以使用它来进行注释#
,是因为,显然,Configure打算支持的所有 shell 都不是有效的注释指示符。看到3行
::
或REM
:: commenttttttttttt
REM commenttttttttttt
&
字符:your commands here & :: commenttttttttttt
IF/ELSE
,FOR
循环等)中使用,REM
因为::
会产生错误。::
可能会在 setlocal ENABLEDELAYEDEXPANSION
cd "C:\Folder" ::this throws a syntax error
git add :: blah this is not a comment
,“致命:pathspec'blah'与任何文件都不匹配”
&
注释,您需要在代码和注释之间添加::
。为了说明这一点,打开命令提示符并运行dir ::blah
它没有列出的内容.
,并与比较dir & ::blah
,这确实
::
将Will脚本与setlocal ENABLEDELAYEDEXPANSION
和一起使用for
不,普通的旧批处理文件REM
用作注释。 ECHO
是在屏幕上打印内容的命令。
要“注释”文件的各个部分,可以使用GOTO
。所有这些命令/技术的示例:
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。读取REM'ed行,然后将其忽略。::'ed一直被忽略。这可以在“过去”加速您的代码。REM之后,您需要一个空格,而::之后,您不需要。
如第一条评论中所述:您可以将信息添加到您认为需要的任何行中
SET DATETIME=%DTS:~0,8%-%DTS:~8,6% ::Makes YYYYMMDD-HHMMSS
至于零件的跳过。将REM放在每一行的前面可能会非常耗时。如前所述,使用GOTO跳过部分是跳过大型代码的简单方法。确保在希望代码继续的位置设置:LABEL。
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
::
和rem
平等。
\n
,然后再次开始解析[需要引用]
如果要注释掉的行数很多,那么最好进行多行注释,而不是注释掉每一行。
请参阅Rob van der Woude的有关评论块的文章:
批处理语言没有注释块,尽管有一些方法可以实现效果。
GOTO EndComment1 This line is comment. And so is this line. And this one... :EndComment1
您可以使用
GOTO
Label和:Label进行块注释。或者,如果注释块出现在批处理文件的末尾,则可以
EXIT
在代码末尾编写,然后编写任意数量的注释以供您理解。@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...
if
代替goto
stackoverflow.com/q/9074476/995714 ss64.com/vb/syntax-hybrid.html stackoverflow.com/a/34512715/995714
& :: comment
color C & :: set red font color
echo IMPORTANT INFORMATION
color & :: reset the color to default
说明:
&
分隔两个命令,因此在这种情况下color C
,第一个命令:: set red font color
是第二个命令。
这个带有注释的语句在直觉上看起来是正确的:
goto error1 :: handling the error
但这不是对注释的有效使用。它之所以起作用,是因为goto
忽略了第一个参数之后的所有参数。证明很简单,这goto
也不会失败:
goto error1 handling the error
但是类似的尝试
color 17 :: grey on blue
失败执行命令由于4个参数未知的color
命令:::
,grey
,on
,blue
。
它将仅作为:
color 17 & :: grey on blue
因此,“&”号是不可避免的。
您可以使用::
或注释掉某些内容REM
:
your commands here
:: commenttttttttttt
要么
your commands here
REM commenttttttttttt
要与命令在同一行上执行此操作,必须添加“&”号:
your commands here & :: commenttttttttttt
要么
your commands here & REM commenttttttttttt
::
嵌套逻辑(IF-ELSE
,FOR
循环等)会导致错误。在这种情况下,请REM
改用。@Rado
当时是在答案中合并的,为此,我只希望使用另一种样式作为答案并使用其他样式。)
这是一个古老的话题,我想在这里添加我的理解,以扩展对该有趣话题的知识。
REM和::之间的主要区别是:
REM本身就是命令,而::不是。
我们可以将::视为令牌,只要CMD解析器在一行中遇到第一个非空白空间,便是::令牌,它将跳过整行并读取下一行。这就是为什么REM后面必须至少有一个空格,以便能够作为该行的注释,而::不需要在其后面有任何空格。
可以从以下FOR语法中最好地了解REM是一个命令本身
基本的FOR语法如下
FOR %v in (set) DO <Command> [command param]
这里<Command>
可以是任何有效的命令所以我们可以写出下面的有效的命令行rem
是一个命令
FOR %i in (1,2,3) DO rem echo %i
但是,我们不能将以下行写::
为不是命令
FOR %i in (1,2,3) DO :: echo %i
::
是一个(无效的)标签(解释了它的行为),因此不应使用(尽管它仍然很常见)
您可以使用以下语法在批处理文件的末尾添加注释:
@echo off
:: Start of code
...
:: End of code
(I am a comment
So I am!
This can be only at the end of batch files
只要确保您不要使用右括号即可。
署名:Leo Guttirez Ramirez在https://www.robvanderwoude.com/comments.php