Как комментировать в bat файлах

REM – создание комментариев в командных файлах Windows.

@ECHO OFF
::
:: Начало работы
REM
REM Продолжение работы
Echo Hello REM Этот текст будет полностью отображен командой ECHO
Echo Hello & REM Отобразить «Hello» командой echo
Copy 1.bat 2.bat & :: Копирование файла 1.bat в 2.bat
pause

Команда REM с пустой строкой обычно используется для выделения отдельных фрагментов командных файлов. При использовании в цепочке с другой командой с помощью амперсанда & позволяет поместить комментарий в ту же строку, что и исполняемая команда:

сopy 1.bat 2.bat & rem Копирование файла 1.bat в 2.bat
Или
сopy 1.bat 2.bat & :: Копирование файла 1.bat в 2.bat

Такая конструкция позволяет поместить комментарий к отдельной команде bat-файла.

В качестве аналога пустой команды REM может использоваться пустая строка, которая так же игнорируется командным процессором CMD.

Строго говоря, двойное двоеточие не является документированной командой интерпретатора команд, а является следствием свойств меток в командных файлах, которые начинаются с двоеточия. Пользоваться подобным способом комментирования стоит с осторожностью, поскольку это может привести к непредсказуемым результатам при его применении в команде FOR или внутри фрагментов командного файла, заключенных в скобки.

Иногда для создания комментариев используется прием, основанный на применении команды безусловного перехода GOTO, размещенной в самом начале командного файла на метку, соответствующую первой строке исполняемых команд. Поскольку интерпретатор команд CMD обрабатывает команды командного файла последовательно, любой текст между командой GOTO и меткой будет им проигнорирован. Соответственно, в этом месте можно, например, поместить поясняющий текст либо любой иной комментарий:

Источник

Как «закомментировать» (добавить комментарий) в пакете / cmd?

У меня есть командный файл, который запускает несколько скриптов Python, которые модифицируют таблицы.

Я хочу, чтобы пользователи закомментировали 1-2 сценария python, которые они не хотят запускать, а не удаляли их из командного файла (чтобы следующий пользователь знал, что эти сценарии существуют как опции!)

Есть ли синтаксис для более подходящего добавления комментария?

11 ответов

Итак, в своем командном файле вы можете использовать это:

Комментирование строки

Для комментирования используйте REM или ::, хотя :: может внутри скобок

Комментарий в конце строки

Для комментариев в конце строки вы можете снова использовать rem и :: в сочетании с & :

Комментарий в конце файла

Встроенные комментарии

Расширение несуществующих переменных заменяется ничем, и, поскольку установка переменной с = довольно сложна, вы можете использовать это для встроенных комментариев:

Многострочные комментарии

Для многострочных комментариев можно использовать GOTO (для внешних скобок) и REM с условным исполнением (для внутренних скобок). Подробнее здесь:

И та же техника, украшенная макросами:

Вы можете использовать :: или rem для комментариев.

Это старая тема, и я хотел бы добавить сюда свое понимание, чтобы расширить знания по этой интересной теме.

Ключевое различие между REM и :: заключается в следующем:

Мы можем рассматривать :: как токен, который, как только синтаксический анализатор CMD обнаруживает первое непустое пространство в строке, это this :: token, он просто пропустит всю строку и прочитает следующую строку. Вот почему после REM должно быть хотя бы пустое пространство, чтобы оно могло функционировать как комментарий для строки, в то время как :: не нуждается в пустом пространстве позади него.

Базовый синтаксис FOR выглядит следующим образом

Однако мы НЕ МОЖЕМ записать следующую строку, поскольку :: не является командой

Вы можете добавлять комментарии в конец командного файла с помощью этого синтаксиса:

Только убедитесь, что вы никогда не используете закрывающие скобки.

Вы можете что-то прокомментировать, используя :: или REM :

Чтобы сделать это в той же строке, что и команда, вы должны добавить амперсанд:

Заметка:

Размещение комментариев в одной строке с командами: используйте & :: comment

Объяснение:

Важный:

Это утверждение с комментарием кажется интуитивно правильным:

Но это недопустимое использование комментария. Это работает только потому, что goto игнорирует все аргументы, кроме первого. Доказательство несложно, и это goto не подведет:

Но похожая попытка

Он будет работать только как:

Значит, амперсанд неизбежен.

Многострочные комментарии

Если вы хотите закомментировать большое количество строк, будет лучше, если вы сможете делать многострочные комментарии, а не комментировать каждую строку.

В пакетном языке нет блоков комментариев, хотя есть способы добиться такого эффекта.

Вы можете использовать GOTO Label и: Label для создания блочных комментариев.

Или, если блок комментариев появляется в конце командного файла, вы можете напишите EXIT в конце кода, а затем любое количество комментариев для вашего понимание.

:: вместо REM предпочтительно использовать в те дни, когда компьютеры были не очень быстрыми. REM-строка считывается, а затем игнорируется. :: ‘ed строка полностью игнорируется. Это могло ускорить ваш код в «старые времена». Более того, после REM вам нужен пробел, после :: вам не нужен.

И, как сказано в первом комментарии: вы можете добавить информацию в любую строку, которую считаете нужным

Вы можете прочитать больше на этом веб-сайте.

РЕДАКТИРОВАТЬ: немного изменил пример, чтобы он содержал элементы, которые вы, по-видимому, ищете.

Источник

Как «закомментировать» (добавить комментарий) в пакете / cmd?

У меня есть пакетный файл, который запускает несколько сценариев Python, которые вносят изменения в таблицу.

Я хочу, чтобы пользователи закомментировали 1-2 сценария Python, которые они не хотят запускать, вместо того, чтобы удалять их из командного файла (чтобы следующий пользователь знал, что эти сценарии существуют как опции!)

Есть ли синтаксис для более подходящего добавления комментария?

Итак, в вашем командном файле вы можете использовать это:

Используйте :: или REM

НО (как отметили люди):

Нет, простые старые командные файлы используют REM в качестве комментария. ECHO это команда, которая печатает что-то на экране.

РЕДАКТИРОВАТЬ: немного изменил пример, чтобы он содержал элементы, которые вы, очевидно, ищете.

:: вместо REM предпочтительно использовался в те дни, когда компьютеры работали не очень быстро. REM-строки читаются, а затем обрабатываются. Строка :: игнорируется полностью. Это может ускорить ваш код в «старые времена». Еще больше после REM вам нужен пробел, после :: вы не делаете.

И, как сказано в первом комментарии: вы можете добавить информацию в любую строку, в которой вы чувствуете необходимость

Многострочные комментарии

Если есть большое количество строк, которые вы хотите закомментировать, то было бы лучше, если бы вы могли делать многострочные комментарии, а не комментировать каждую строку.

В пакетном языке нет блоков комментариев, хотя есть способы добиться эффекта.

Вы можете использовать GOTO Label и: Label для создания блочных комментариев.

Или, если блок комментариев появляется в конце пакетного файла, вы можете написать EXIT в конце кода, а затем любое количество комментариев для вашего понимания.

Размещение комментариев в одной строке с командами: используйте & :: comment

Объяснение:

Важный:

Это утверждение с комментарием выглядит интуитивно правильным:

но это не допустимое использование комментария. Это работает только потому, что goto игнорирует все аргументы после первого. Доказательство легко, это goto также не подведет:

Но похожая попытка

Это будет работать только как:

Так что амперсанд неизбежен.

Вы можете что-то закомментировать, используя :: или REM :

Чтобы сделать это в той же строке, что и команда, необходимо добавить амперсанд:

Замечания:

Это старая тема, и я хотел бы добавить свое понимание здесь, чтобы расширить знания этой интересной темы.

REM сама команда, а :: НЕ.

Мы можем рассматривать :: как токен, который, как только синтаксический анализатор CMD обнаружит первый непустой пробел в строке, будет следующим :: токеном, он просто пропустит всю строку и прочитает следующую строку. Вот почему за REM должен следовать хотя бы пробел, чтобы он мог функционировать в качестве комментария для строки, в то время как :: не нужно никакого пробела позади него.

Это РЗМ команда сама по себе может быть лучше понято из нижеследующего FOR синтаксиса

Основной синтаксис FOR следующий

здесь может быть любая действительная команда. Таким образом, мы можем написать следующую действительную командную строку как rem команду

Тем не менее, мы не можем написать следующую строку, так как :: это не команда

Источник

How to «comment-out» (add comment) in a batch/cmd?

I have a batch file that runs several python scripts that do table modifications.

I want to have users comment out the 1-2 python scripts that they don’t want to run, rather than removing them from the batch file (so the next user knows these scripts exist as options!)

Is there a syntax for more appropriately adding a comment?

Как комментировать в bat файлах. AiMJg. Как комментировать в bat файлах фото. Как комментировать в bat файлах-AiMJg. картинка Как комментировать в bat файлах. картинка AiMJg

12 Answers 12

Use :: or REM

BUT (as people noted):

Как комментировать в bat файлах. AiMJg. Как комментировать в bat файлах фото. Как комментировать в bat файлах-AiMJg. картинка Как комментировать в bat файлах. картинка AiMJg

So, in your batch file, you might use this:

No, plain old batch files use REM as a comment. ECHO is the command that prints something on the screen.

What can I say? batch files are a relic of times long gone, they’re clunky and ugly.

EDIT: modified the example a bit to have it contain the elements you are apparently looking for.

The :: instead of REM was preferably used in the days that computers weren’t very fast. REM’ed line are read and then ingnored. ::’ed line are ignored all the way. This could speed up your code in «the old days». Further more after a REM you need a space, after :: you don’t.

And as said in the first comment: you can add info to any line you feel the need to

As for the skipping of parts. Putting REM in front of every line can be rather time consuming. As mentioned using GOTO to skip parts is an easy way to skip large pieces of code. Be sure to set a :LABEL at the point you want the code to continue.

Multi line comments

If there are large number of lines you want to comment out then it will be better if you can make multi line comments rather than commenting out every line.

The batch language doesn’t have comment blocks, though there are ways to accomplish the effect.

You can use GOTO Label and :Label for making block comments.

Or, If the comment block appears at the end of the batch file, you can write EXIT at end of code and then any number of comments for your understanding.

Как комментировать в bat файлах. 7fTfG. Как комментировать в bat файлах фото. Как комментировать в bat файлах-7fTfG. картинка Как комментировать в bat файлах. картинка 7fTfG

Putting comments on the same line with commands: use & :: comment

Explanation:

& separates two commands, so in this case color C is the first command and :: set red font color is the second one.

Important:

This statement with comment looks intuitively correct:

but it is not a valid use of the comment. It works only because goto ignores all arguments past the first one. The proof is easy, this goto will not fail either:

But similar attempt

It will only work as:

So the ampersand is inevitable.

Как комментировать в bat файлах. QEWAU. Как комментировать в bat файлах фото. Как комментировать в bat файлах-QEWAU. картинка Как комментировать в bat файлах. картинка QEWAU

You can comment something out using :: or REM :

To do it on the same line as a command, you must add an ampersand:

Как комментировать в bat файлах. 5iv4J. Как комментировать в bat файлах фото. Как комментировать в bat файлах-5iv4J. картинка Как комментировать в bat файлах. картинка 5iv4J

You can add comments to the end of a batch file with this syntax:

Just make sure you never use a closing parentheses.

Как комментировать в bat файлах. QSd1F. Как комментировать в bat файлах фото. Как комментировать в bat файлах-QSd1F. картинка Как комментировать в bat файлах. картинка QSd1F

This is an old topic and I’d like to add my understanding here to expand the knowledge of this interesting topic.

The key difference between REM and :: is:

REM is a command itself, while :: is NOT.

We can treat :: as a token that as soon as CMD parser encounters the first non-blank space in a line is this :: token, it will just skip the whole line and read next line. That’s why REM should be followed by at least a blank space to be able to function as a comment for the line, while :: does not need any blank space behind it.

That REM is a command itself can be best understood from the following FOR syntax

The basic FOR syntax is as follows

here can be any valid command So we can write the following valid command line as rem is a command

However, we CANNOT write the following line as :: is not a command

Источник

Урок bat-аники


Автор: Алексей Александров
Источник: RSDN Magazine #2-2005

Опубликовано: 11.07.2005
Исправлено: 10.12.2016
Версия текста: 1.0

Введение

Мы все любим писать серьезные вещи на серьезных языках. Шаблоны, C++, Reflection, Perl и многое другое – вот то, что мы любим, то, чему посвящаем длинные сообщения в форумах, то, что снится нам по ночам.

Однако в нашей повседневной деятельности встречаются и вещи, которые не так интересны и интеллектуальны. Мы не очень любим говорить об этом, делаем вид, что Это – грязно, нечистоплотно и недостойно нашего внимания. Однако, приходит день, приходит час и перст Судьбы находит нас – нам надо написать еще один батничек… Иногда это запускалка для построения проекта, которая должна при ошибке компиляции скопировать логи на сетевой диск, иногда – запуск обновления исходных текстов из SVN. Иногда – что-нибудь еще.

К чему я это все? А к тому, что поговорим мы о полезных хитростях при написании файлов сценариев на встроенном командном языке Windows. К счастью, это занятие не является доминирующим в профессиональной деятельности автора, так что я не обязуюсь заполнить абсолютно все пробелы в данной области. Кроме того, рожденный ползать летать не может, и из cmd.exe, увы, не получится ни /usr/bin/perl, ни даже /bin/sh. Так что, все нижеприведенное – просто некоторые интересные факты из жизни файлов с расширением bat, на которые автор обратил внимание во время решения различных практических задач автоматизации.

Наш урок будет построен по сугубо практическому принципу, известному в народе как Cookbook. Иными словами, я не буду вдаваться в синтаксические и семантические дебри командного языка Windows, а лишь продемонстрирую его возможности (хотел написать «мощь», но все-таки передумал). Именно поэтому большинство следующих заголовков будет начинаться со слова «Как». Впрочем, для полноты по ходу развития событий будут даваться подробные комментарии, в том числе и по языковым конструкциям.

ПРЕДУПРЕЖДЕНИЕ

Практически все описанные здесь рецепты подойдут только для Windows 2000 и старше. Bat-язык Windows 9x, к счастью, можно считать почившим, так что здесь он не рассматривается. Более того, диалекты cmd.exe операционных систем Windows 2000, Windows XP и Windows Server 2003 также немного различаются. Все приведенное ниже создано и проверено на компьютере под управлением операционной системы Windows XP. За подробной информацией по различиям в реализации той или иной команды обращайтесь к [1].

Как экранировать символ?

В командном языке Windows существует некоторый набор символов с высоким приоритетом, которые всегда трактуются как спецсимволы. К ним, в частности, относятся:

В случае если символ, относящийся к одному из таких операторов, должен быть включен в вашу команду в его литеральном смысле, вас ждут определенные неожиданности. Например, при выполнении вот такой строки

символ процента будет «съеден» интерпретатором, который решит, что это попытка вывода значения какой-то переменной. В случае со знаком процента решение довольно хорошо известно и состоит в удвоении этого символа:

после чего все заработает так, как надо. Однако в других случаях все менее очевидно. Рассмотрим командный сценарий, который генерирует незатейливый HTML-файл:

К сожалению, при попытке запуска этого «чуда инженерного разума» нас постигнет неудача в виде сообщения об ошибке

Оно и понятно: командный интерпретатор не в силах разобраться, где его просят вывести на экран символ HTML-тега, а где перенаправить вывод. В нормальных языках программирования эта проблема обычно решается обрамлением строковых литералов кавычками. Отчасти это помогает и в bat-файлах. Но лишь отчасти. Выполнение строки

приведет к тому, что в выходной файл будут записаны и сами кавычки. Это явно не совсем то, что требуется.

К счастью, есть один малоизвестный способ, позволяющий добиться требуемого результата. Символ ^ позволяет экранировать любой другой символ с безусловным приоритетом. Таким образом, вышеприведенный пример генерации HTML может быть успешно записан так:

Таким же способом можно экранировать любой другой специальный символ. Очевидно, можно экранировать и сам ^. Не очень эстетично, зато дешево и практично. Слово «надежно» я пропустил умышленно…

Как перенести длинную строку?

Совет по поводу экранирующего символа ^ имеет еще одно применение: перенос строк. Я (как и многие из вас, наверное) люблю, чтобы любой исходный текст, который я пишу, выглядел красиво – даже *.bat-файлы. Одним из обязательных условий красоты и удобочитаемости кода для меня является его ширина: все строки должны умещаться в 78 столбцов. Можно поспорить по поводу числа 78, но в одном я непреклонен – ограничение на ширину текста кода должно быть, иначе это не код, а макароны.

Так вот долгое время *.bat-файлы портили мне жизнь тем, что иногда приходилось писать длинную строку – например, вызов какой-нибудь другой программы с кучей опций, и я не знал, что с этим делать. Происходило это нечасто, но всегда было неприятно. Но, к счастью, моя жизнь изменилась с тех пор, как я открыл для себя Супер-Символ ^:

Помните лишь, что чудо-символ должен быть последним в строке – скажите «Нет!» концевым пробелам.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *