Есть несколько способов комментировать в командном файле
1) Использование rem
Это официальный путь. По-видимому, выполнение занимает больше времени, чем ::
, хотя, по-видимому, он прекращает синтаксический анализ раньше, чем обрабатываются символы. Процентное расширение происходит перед rem и ::
идентифицируется, поэтому неправильное использование процентов, т.е.%~
приведет к ошибкам, если проценты присутствуют. Безопасно для использования в любом месте блоков кода.
2) Используя ярлыки :
, ::
или:;
т.п.
Ибо :: comment
': comment' является недопустимым именем метки, потому что оно начинается с недопустимого символа. Можно использовать двоеточие в середине метки. Если пробел начинается в начале метки, он удаляется : label
становится :label
. Если в середине метки появляется пробел или двоеточие, остальная часть имени не интерпретируется, что означает, что если есть две метки, :f:oo
и :f rr
обе будут интерпретироваться как, :f
и будет переходиться только к более поздней определенной метке в файле. Остальная часть ярлыка фактически является комментарием. Есть несколько альтернатив ::
, перечисленных здесь . Вы никогда не можете goto
или ярлык. и не будет работать.call
::foo
goto :foo
goto ::foo
Они отлично работают вне блоков кода, но после метки в блоке кода, недействительной или нет, должна быть действительная командная строка. :: comment
действительно еще одна действительная команда. Это интерпретирует это как команду, а не метку; команда имеет приоритет. Это команда для записи на ::
том, которая будет работать, если вы ее выполнили subst :: C:\
, иначе вы получите сообщение об ошибке тома. Вот почему :;
это возможно лучше, потому что это не может быть интерпретировано таким образом, и, следовательно, интерпретируется как метка, которая служит допустимой командой. Это не рекурсивно, т. Е. Следующая метка не нуждается в команде после нее. Вот почему они приходят по двое.
Вы должны предоставить действительную команду после метки, например echo something
. Метка в блоке кода должна содержать хотя бы одну допустимую команду, поэтому строки идут парами по две. Вы получите неожиданную )
ошибку, если на следующей строке есть пробел или закрывающая скобка. Если между двумя ::
строками будет пробел, вы получите неверную синтаксическую ошибку.
Вы также можете использовать оператор ::
комментария в комментарии следующим образом:
@echo off
echo hello
(
:;(^
this^
is^
a^
comment^
)
:;
)
:;^
this^
is^
a^
comment
:;
)
Но вам нужен трейлинг :;
по указанной выше причине.
@echo off
(
echo hello
:;
:; comment
:; comment
:;
)
echo hello
Это хорошо, пока есть четное число. Это, несомненно, лучший способ комментировать - с 4 строками и :;
. При этом :;
вы не получите никаких ошибок, которые нужно подавлять, используя 2> nul
или subst :: C:\
. Вы можете использовать, subst :: C:\
чтобы ошибка тома не была найдена, но это означает, что вам придется также вставить C: в код, чтобы предотвратить превращение вашего рабочего каталога ::\
.
Чтобы прокомментировать в конце строки, вы можете сделать
command &::
или command & rem comment
, но все равно должно быть четное число, например:
@echo off
(
echo hello & :;yes
echo hello & :;yes
:;
)
echo hello
У первой echo hello & :;yes
есть допустимая команда на следующей строке, но у второй & :;yes
нет, поэтому она нужна, то есть :;
.
3) Использование недопустимой переменной среды
%= comment =%
, В пакетном файле переменные среды, которые не определены, удаляются из сценария. Это позволяет использовать их в конце строки без использования&
. Обычно используется недопустимая переменная среды, то есть та, которая содержит знак равенства. Дополнительное равенство не требуется, но оно выглядит симметрично. Кроме того, имена переменных, начинающиеся с «=», зарезервированы для недокументированных динамических переменных. Эти динамические переменные никогда не заканчиваются на «=», поэтому при использовании «=» как в начале, так и в конце комментария невозможно столкновение имен. Комментарий не может содержать %
или :
.
@echo off
echo This is an example of an %= Inline Comment =% in the middle of a line.
4) Как команда, перенаправив stderr на nul
@echo off
(
echo hello
;this is a comment 2> nul
;this is another comment 2> nul
)
5) В конце файла все, что находится после закрытой скобки, является комментарием
@echo off
(
echo hello
)
(this is a comment
this is a comment
this is a comment