我有一个批处理文件,运行几个python脚本,做表修改。
我想让用户注释掉1-2个他们不想运行的python脚本,而不是从批处理文件中删除它们(这样下一个用户就知道这些脚本作为选项存在!) 我还想添加注释,以引起他们的注意,特别是他们在运行批处理文件之前需要更新的变量。我看到我可以使用REM,但它看起来更像是在用户运行后更新进度。
是否有更适当地添加注释的语法?
我有一个批处理文件,运行几个python脚本,做表修改。
我想让用户注释掉1-2个他们不想运行的python脚本,而不是从批处理文件中删除它们(这样下一个用户就知道这些脚本作为选项存在!) 我还想添加注释,以引起他们的注意,特别是他们在运行批处理文件之前需要更新的变量。我看到我可以使用REM,但它看起来更像是在用户运行后更新进度。
是否有更适当地添加注释的语法?
当前回答
注释一行
对于注释行,使用REM或::though::可能会在括号内失败
在以!<分隔符开头的延迟展开行中,>将被忽略,因此可以用于注释:
@echo off
setlocal enableDelayedExpansion
echo delayed expansion activated
!;delayed expansion commented line
echo end of the demonstration
在行末注释
对于行末的注释,您可以再次使用rem和::结合&:
echo --- &:: comment (should not be the last line in the script)
echo --- &rem comment
在文件末尾注释
因为exit命令后会被解析,你可以使用它在文件末尾添加注释:
@echo off
echo commands
exit /b
-------------------
commnts at the end
of the file
------------------
内联注释
不存在的变量的展开将被什么都不替换,并且设置一个变量=相当困难,你可以在内联注释中使用这个:
@echo off
echo long command %= this is a comment =% with an inline comment
多行注释
对于多行注释,可以使用GOTO(用于括号外)和REM带有条件执行(用于括号内)。详情如下:
@echo off
echo starting script
goto :end_comments
comented line
one more commented line
:end_comments
echo continue with the script
(
echo demonstration off
rem/||(
lines with
comments
)
echo multiline comment inside
echo brackets
)
同样的技术用宏来美化:
@echo off
::GOTO comment macro
set "[:=goto :]%%"
::brackets comment macros
set "[=rem/||(" & set "]=)"
::testing
echo not commented 1
%[:%
multi
line
comment outside of brackets
%:]%
echo not commented 2
%[:%
second multi
line
comment outside of brackets
%:]%
::GOTO macro cannot be used inside for
for %%a in (first second) do (
echo first not commented line of the %%a execution
%[%
multi line
comment
%]%
echo second not commented line of the %%a execution
)
其他回答
您可以使用::或rem进行注释。
注释时,使用::,因为它快3倍。这里显示了一个示例
只有当注释在if中时,才使用rem,因为冒号可能会出错,因为它们是一个标签。
将注释与命令:use &:: comment放在同一行
color C & :: set red font color
echo IMPORTANT INFORMATION
color & :: reset the color to default
解释:
&分隔了两个命令,因此在本例中,color C是第一个命令,::set红色字体颜色是第二个命令。
重要的是:
这个带有注释的语句直观上看起来是正确的:
goto error1 :: handling the error
但这不是注释的有效使用。它之所以有效,只是因为goto忽略了第一个参数之后的所有参数。证明很简单,这个goto也不会失败:
goto error1 handling the error
但是类似的尝试
color 17 :: grey on blue
原因:::,grey, on, blue 4个参数与color命令不匹配,导致命令执行失败。
它只会工作:
color 17 & :: grey on blue
所以&是不可避免的。
注释一行
对于注释行,使用REM或::though::可能会在括号内失败
在以!<分隔符开头的延迟展开行中,>将被忽略,因此可以用于注释:
@echo off
setlocal enableDelayedExpansion
echo delayed expansion activated
!;delayed expansion commented line
echo end of the demonstration
在行末注释
对于行末的注释,您可以再次使用rem和::结合&:
echo --- &:: comment (should not be the last line in the script)
echo --- &rem comment
在文件末尾注释
因为exit命令后会被解析,你可以使用它在文件末尾添加注释:
@echo off
echo commands
exit /b
-------------------
commnts at the end
of the file
------------------
内联注释
不存在的变量的展开将被什么都不替换,并且设置一个变量=相当困难,你可以在内联注释中使用这个:
@echo off
echo long command %= this is a comment =% with an inline comment
多行注释
对于多行注释,可以使用GOTO(用于括号外)和REM带有条件执行(用于括号内)。详情如下:
@echo off
echo starting script
goto :end_comments
comented line
one more commented line
:end_comments
echo continue with the script
(
echo demonstration off
rem/||(
lines with
comments
)
echo multiline comment inside
echo brackets
)
同样的技术用宏来美化:
@echo off
::GOTO comment macro
set "[:=goto :]%%"
::brackets comment macros
set "[=rem/||(" & set "]=)"
::testing
echo not commented 1
%[:%
multi
line
comment outside of brackets
%:]%
echo not commented 2
%[:%
second multi
line
comment outside of brackets
%:]%
::GOTO macro cannot be used inside for
for %%a in (first second) do (
echo first not commented line of the %%a execution
%[%
multi line
comment
%]%
echo second not commented line of the %%a execution
)
你可以使用::或REM来注释一些东西:
your commands here
:: commenttttttttttt
or
your commands here
REM commenttttttttttt
为了在同一行执行命令,你必须添加一个&号:
your commands here & :: commenttttttttttt
or
your commands here & REM commenttttttttttt
注意:
在嵌套逻辑(IF-ELSE, FOR循环等)中使用::将导致错误。在这种情况下,用REM代替。
在电脑速度不是很快的年代,::代替快速眼动是最好的选择。 REM'ed行被读取,然后忽略。:“埃德一行都被忽略了。”这可以在“过去”加速你的代码。而且在快速眼动之后你需要一个空间,在::之后你不需要。
正如第一条评论所说:你可以在任何你觉得需要的行中添加信息
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