我找到了这个程序http://baiyunmanor.com/blog/work/get-current-date-time-in-dos-batch-file/
但我不知道该行是什么
:: datetime.bat
到底是什么意思?
答案 0 :(得分:53)
以双冒号开头的行表示命令处理器忽略的无效标签,因此可能用于插入注释。由于无法跟踪的原因,许多人使用::
在批处理文件中插入注释,但您必须意识到其使用中存在一些陷阱,这些陷阱在Koterpillar&#39中给出的链接中有所描述。的答案。似乎第一次使用::
而不是REM
命令的目的是加速在慢速机器(即:软盘)中执行批处理文件,但这个原因不是有效的理由多年前使用双结肠。
命令处理器将忽略包含无效标签的任何行,您几乎可以使用任何特殊字符生成无效标签。例如:
@echo off
:~ This is a comment
:` This is a comment
:! This is a comment
:@ This is a comment
:# This is a comment
:$ This is a comment
:% This is a comment
:^ This is a comment
:& This is a comment
:* This is a comment
:( This is a comment
:) This is a comment
:_ This is a comment
:- This is a comment
:+ This is a comment
:= This is a comment
:{ This is a comment
:} This is a comment
:[ This is a comment
:] This is a comment
:| This is a comment
:\ This is a comment
:: This is a comment
:; This is a comment
:" This is a comment
:' This is a comment
:< This is a comment
:> This is a comment
:, This is a comment
:. This is a comment
:? This is a comment
:/ This is a comment
echo OK
换句话说:如果你想插入评论并且你不想使用REM
命令(虽然我无法想到这样做),你有32个可能的字符组合到这样做。为什么你应该使用这个:::
?仅仅因为35年前编写的一些旧程序就是这样做的吗?
答案 1 :(得分:51)
::
是一个标签(也是不准确的,通过评论标签在野外都知道),实际上可以像REM
一样被视为评论,如它是一个“不可转动”的标签。
但REM
和::
之间存在一些差异。主要是:
ECHO ON
时会显示REM
行,但不会显示评论为::
::
可以执行行尾插入符号(即^
在以::
开头的行的末尾生成下一行也< / strong>评论):
:: This is a comment^
echo but watch out because this line is a comment too
标签和::
有一个特殊的逻辑,可能会导致括号块出现问题 - 在(
)
内使用时要小心。例如:
for %%D in (hi) do (
echo Before...
:: My comment
:: Some other comment
echo After...
)
输出:
Before ...
The system cannot find the drive specified.
After...
答案 2 :(得分:15)
以冒号开头的行是您可以使用goto
跳转到的标签:
goto end
:end
以双冒号开头的行是一个标签,除非你不能,甚至不小心跳到它:
goto :end REM this doesn't work
::end
因此,双冒号用于评论行。
答案 3 :(得分:7)
正如acdcjunior提到的标签和::
有一个特殊的逻辑,可能会导致括号内的问题
以下是几个样本
样本1
IF 1==1 (
::
)
样本1的输出
) was unexpected at this time.
样本2
IF 1==1 (
::
::
)
样本2的输出
The system cannot find the drive specified.
答案 4 :(得分:2)
冒号(:)是一个标签标记,可用于获取说明。
有些人使用:作为评论,所以双冒号只是一种风格的REM声明
答案 5 :(得分:1)
如果您使用传统的 REM
命令在 DOS 批处理脚本中注释掉一行,那么注释中的任何输出重定向仍会完成。例如,考虑这个脚本:
echo 1 > a.txt
rem echo 2 > b.txt
echo 3 > c.txt
该脚本将截断 b.txt
即使该行看起来被“注释掉”。
使用像双冒号这样的无效标签前缀将禁用任何重定向。