最近我开始将行注释为double ::,但我意识到它可以在长时间内做出的问题"对于"或"选择"脚本和问题" goto"正如所描述的那样What does :: (double colon) mean in DOS batch files?
所以我想知道将变量设置为REM并使用它是否可以?
我已经在一个小cmd脚本中看到了某个地方,并且非常喜欢它,因为它使批处理代码看起来更清晰。但我想知道它是否会产生任何问题?
@echo off
Set #=REM
%#% show date
echo it's %date%
%#% let's wait few seconds...
ping 1.1.1.1 > nul
echo and now it's %date%
%#% whatever
exit
答案 0 :(得分:3)
这不是问题,不管怎么说。
该变量实际上充当了宏,我经常使用该技术(尽管不是备注)。批处理解析器在解释代码逻辑之前扩展变量中的代码,因此它的功能与您希望/期望的完全相同。
实际上有一种复杂的技术来创建带参数的批处理宏。 http://www.dostips.com/forum/viewtopic.php?f=3&t=2518上的帖子描述了最终语法,http://www.dostips.com/forum/viewtopic.php?t=1827显示了该技术随时间的发展。
您使用%#%
作为REM
宏是完全有效的,并且没有人能够最好地使用{&#34}。样式。但我更喜欢将:: Comment
用于不在括号内的块中的注释,而%= comment =%
用于括号内的块中的注释。最后一种语法只是一个未定义的变量,它被扩展为无。名称中只有少数动态伪变量包含=
,并且任何批处理变量都不可能在名称中包含两个=
。因此,只要评论不包含:
或%
,该技术就可以安全使用。
答案 1 :(得分:1)
当我在批处理中写一个rem注释时,我把它留空了比当前代码缩进更多的空白。 因为我的代码缩进是2个空格,所以对我来说这样的可读性很快就会落入眼中。
...
rem my comment
...
使用echo on调试时,Rem注释很有用:读取行到行尾。使用了所有%variables%
以及参数%1 ... %9 %*
。
但是,这意味着rem注释中循环内的所有变量仅在开始时解析 - 因为命令rem在执行之前显示一次,但在执行期间保持静默。
如果要在括号内调试各种变量,则必须使用echo rem显示这些变量。 对于这样的调试,建议设置一个变量,以便在调试关闭时再调用echo echo rem。
If defined debug (set "rem=echo rem") else set "rem=rem"
对于不应该显示两次的其他调试,我使用变量%mon%
。这个我把回声关闭到回声和回声到rem。
rem < :checkEchoOn
:checkEchoOn
:: Liest ob ECHO ON oder OFF geschalten ist um Variablen zu setzen
:: VAR Mon = read ECHO ON / OFF ;set Echo( / rem
rem = :checkEchoOn
@(
rem ^%Mon% Zeilen bei Echo on auf REM umschalten
echo>"%temp%\isOn.Ft"
< "%temp%\isOn.Ft" find "ON" >nul
if not errorlevel 1 set "Mon=rem"
if errorlevel 1 set "Mon=echo("
del "%temp%\isOn.Ft"
rem > END checkEchoOn
if /i "%~0" equ ":CheckEchoOn" exit /b
)
%mon% this is a visible comment - only once
正如Dave已经写过的那样,以2 doublecolon开头的注释不会在循环括号内开始。让人们在循环包中做到这一点。 这些::注释通常是对被调用的批处理或函数的解释。
请注意,这些行完全读入。 %Variable%
和参数%1 ... %9 %*
以及特殊字符被视为要执行的行(请参阅Jebs声明)。
仅凭这一点就是仔细编写这些评论的原因。
这些::注释行可以写成多行,这意味着行末尾的(未屏蔽的)插入符号,以下行被视为注释的延续。因此,几个连续的注释行没有双点是可能的。
%== loop commentaries %
主要用于编码概述。
我使用的另一种评论是if-loop评论。其中也用于调试,但仅用于镜像一次的功能。为此,评论要么以*
开头,要么评论就像这样开始。
请注意此注释仅适用于函数开始。 if函数在函数正常后用右括号终止。
...
call :Sub1
if :Sub == begin ( * begin :Sub1
this will begin Sub1
:Sub1
4> "test.txt" (
>&4 echo this is a test
)
exit /b
if :Sub == END * END :Sub1 )
...
例如,在版本Alteration的情况下也可以使用它。
...
if :new == begin * begin Version 2.1
... new code
if :new == END * END Version 2.1
...
最好的方法是如何使用评论以及它是否对您有用。 第二个方面是你也可以理解他们编写的其他批次。除此之外,您还可以使用注释为您正确记录代码。它也适合你。