it-swarm.com.ru

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

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

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

  2. Я также хочу добавить комментарии, чтобы привлечь их внимание конкретно к переменным, которые им нужно обновить в пакетном файле, прежде чем они его запустят. Я вижу, что могу использовать REM. Но похоже, что это больше для обновления пользователя с прогрессом после его запуска. 

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

712
user1397044

Команда rem действительно для комментариев. Он не обновляет никого после запуска скрипта. Однако некоторые авторы сценариев могут использовать его вместо echo, потому что по умолчанию пакетный интерпретатор распечатывает каждую команду перед обработкой. Поскольку команды rem ничего не делают, их можно печатать без побочных эффектов. Чтобы не печатать команду, добавьте к ней префикс @ или, чтобы применить этот параметр ко всей программе, запустите @echo off. (Это echo off, чтобы не печатать дальнейшие команды; @ - чтобы не печатать та команду до вступления в силу настройки эха.)

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

@echo off
REM To skip the following Python commands, put "REM" before them:
python foo.py
python bar.py
723
Rob Kennedy

:: или REM

::   commenttttttttttt
REM  commenttttttttttt

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

  • Если вы используете inline, вам нужно добавить символ &:
    your commands here & :: commenttttttttttt
  • Внутри вложенной логики (IF/ELSE, FOR циклов и т.д.) ИспользуйтеREM, поскольку :: выдает ошибку.
  • :: может завершиться ошибкой в ​​setlocal ENABLEDELAYEDEXPANSION 
787
T.Todua

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

Чтобы «закомментировать» разделы файла, вы можете использовать GOTO. Пример всех этих команд/методов:

REM it starts here the section below can be safely erased once the file is customised
ECHO Hey you need to edit this file before running it!  Check the instructions inside
ECHO Now press ctrl-c to interrupt execution or enter to continue
PAUSE
REM erase the section above once you have customised the file
python executed1.py
ECHO Skipping some stuff now
GOTO End
python skipped1.py
python skipped2.py
:END
python executed2.py

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

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

Правка: немного изменил пример, чтобы он содержал элементы, которые вы, очевидно, ищете.

42
fvu

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

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

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
28
Kees

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

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

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

GOTO EndComment1
This line is comment.
And so is this line.
And this one...
:EndComment1

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

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

@ECHO OFF
REM Do something
  •
  •
REM End of code; use GOTO:EOF instead of EXIT for Windows NT and later
EXIT

Start of comment block at end of batch file
This line is comment.
And so is this line.
And this one...

Комментарии Источник

22
Somnath Muluk

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

color C          & :: set red font color
echo IMPORTANT INFORMATION
color            & :: reset the color to default

Объяснение:

& разделяет две команды , поэтому в этом случае color C - первая команда, а :: set red font color - вторая.


Важный:

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

goto error1         :: handling the error

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

goto error1 handling the error

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

color 17            :: grey on blue

не удается выполнить команду из-за 4 аргументов, неизвестных команде color: ::, grey, on, blue.

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

color 17     &      :: grey on blue

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

12
miroxlav

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

your commands here
:: commenttttttttttt

или же

your commands here
REM  commenttttttttttt

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

your commands here      & ::  commenttttttttttt

или же

your commands here      & REM  commenttttttttttt

Замечания:

  • Использование::во вложенной логике (IF-ELSE, FOR циклы и т.д.) Вызовет ошибку. В этих случаях используйтеREMвместо этого.
2
Pikamander2

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

Основное различие между REM и :::

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

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

То, что REM является самой командой, лучше всего понять из следующего синтаксиса ДЛЯ

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

FOR %v in (set) DO <Command> [command param] 

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

FOR %i in (1,2,3) DO rem echo %i

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

FOR %i in (1,2,3) DO :: echo %i
0
jyao