REM – комментарий в командном файле.
Команда REM является встроенной командой интерпретатора команд cmd.exe и применяется для создания комментариев в командных файлах. Строка, начинающаяся с REM, не обрабатывается командным интерпретатором и может использоваться для пояснений, заметок и т.п., что бывает очень не лишним в сложных bat-файлах. Иногда, в качестве альтернативы команде REM используются приемы, основанные на особенностях реализации командного процессора cmd.exe, как, например, двойное двоеточие:
@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 и меткой будет им проигнорирован. Соответственно, в этом месте можно, например, поместить поясняющий текст либо любой иной комментарий:
REM Это большой командный файл
Goto :Label1
Здесь можно разместить любой текст, который может быть подробным описанием командного файла.
:label1
Rem начало исполняемой части командного файла
@echo off
. . .
Как добавить комментарии в bat-файл
Windows- Bot
- 25.01.2020
- 3
- 78
- 78
- 0
- Содержание статьи
Описание
При написании bat файлов бывает необходимо оставить в коде комментарии, чтобы в нем потом можно было быстро разобраться спустя время или кому-нибудь другому, кто будет этот файл использовать.
Примеры
Комментарии можно добавить несколькими способами. Первый больше годится для написания больших комментариев, описывающих либо весь пакетный файл, либо несколько больших его блоков. Код выглядит следующим образом:
goto start -------------------------------------- Этот пакетный файл предназначен для автоматизации рутинных операций, выполняемых ночью для синхронизации содержимого корпоративного ftp-сервера с ftp-серверами филиалов -------------------------------------- Пакетный файл написан 01/01/2004 Последнее исправление внесено 10/02/2004 -------------------------------------- И т.д. :start
Такое написание комментария при запуске пакетного файла передаст управление сразу к команде, следующей за меткой start. За это отвечает оператор перехода goto.
Более простые комментарии (из одной или нескольких строк) можно добавить, начиная строки с команды rem или с двух двоеточий, идущих друг за другом.
rem Этот блок устанавливает соединение с удаленным сервером
rem А это вторая строка с комментарием
:: Этот блок проверяет дату изменения файлов
:: А это вторая строка с комментарием
Комментирование больших пакетных файлов (как, в принципе, и любого кода) — хороший тон, который значительно облегчает процесс разбора этих файлов другими людьми или самим автором по прошествии значительного времени с момента написания.
Как «comment-out» (добавить комментарий) в batch/cmd?
У меня есть batch file, который запускает несколько сценариев python, которые делают модификации таблиц.
Я хочу, чтобы пользователи комментировали сценарии 1-2 python, которые они не хотят запускать, а не удаляли их из batch file (чтобы следующий пользователь знал, что эти сценарии существуют как опции!)
Я также хочу добавить комментарии, чтобы привлечь их внимание конкретно к переменным, которые они должны обновить в Batch file, прежде чем запускать его.
REM
. Но похоже, что это больше для обновления пользователя с прогрессом после того, как он его запустил.
Есть ли синтаксис для более подходящего добавления комментария?
batch-file cmd comments comment-conventionsПоделиться Источник user1397044 29 июня 2012 в 21:40
10 ответов
1008
:: commenttttttttttt
REM commenttttttttttt
::
не работает в строке; добавьте символ&
:your commands here & :: commenttttttttttt
- Внутри вложенных частей (
IF/ELSE
,FOR
циклов и т. Д.) За::
должна следовать нормальная строка, в противном случае она дает ошибку (используйтеREM
там). ::
также может потерпеть неудачу вsetlocal ENABLEDELAYEDEXPANSION
Поделиться
927
Команда rem
действительно предназначена для комментариев. Он по своей сути никого не обновляет после запуска скрипта. Однако некоторые авторы сценариев могут использовать его таким образом вместо echo
, потому что по умолчанию пакетный интерпретатор распечатает каждую команду перед ее обработкой. Поскольку команды rem
ничего не делают, их безопасно печатать без побочных эффектов. Чтобы избежать печати команды, поставьте перед ней префикс @
или , чтобы применить этот параметр во всей программе, запустите
. (Это echo off
, чтобы избежать печати дальнейших команд; @
-чтобы избежать печати этой команды до вступления в силу параметра echo.)
Итак, в вашем batch file вы можете использовать это:
@echo off
REM To skip the following Python commands, put "REM" before them:
python foo. py
python bar.py
Поделиться Rob Kennedy 29 июня 2012 в 21:49
50
Нет, обычные старые пакетные файлы используют REM
в качестве комментария. ECHO
-это команда, которая выводит что-то на экран.
Для «comment out» разделов файла вы можете использовать GOTO
. Пример всех этих commands/techniques:
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
Что я могу сказать? пакетные файлы-это пережиток давно минувших времен, они неуклюжи и уродливы. fileName >outFileName Я хотел бы добавить комментарий к каждому из вариантов — e, как указано в следующих…
33
:: вместо REM предпочтительно использовалось в те дни, когда компьютеры были не очень быстрыми. REM’ed строки считываются, а затем регистрируются. ::»строки ed полностью игнорируются. Это может ускорить ваш код в «the old days». Далее, после 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
Поделиться Kees 02 ноября 2013 в 21:33
27
Многострочные комментарии
Если вы хотите закомментировать большое количество строк, то будет лучше, если вы сможете делать многострочные комментарии, а не комментировать каждую строку.
Смотрите этот пост Роба ван дер Вуда в блоках комментариев :
Пакетный язык не имеет блоков комментариев, хотя есть способы добиться этого эффекта.
GOTO EndComment1 This line is comment. And so is this line. And this one... :EndComment1
Вы можете использовать
GOTO
Label и :Label для создания комментариев к блокам.Или, если блок комментариев появляется в конце batch file, вы можете напишите
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...
Поделиться Somnath Muluk 24 августа 2016 в 10:50
14
Размещение комментариев в одной строке с командами: use
& :: 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
Так что амперсанд неизбежен.
Поделиться miroxlav 09 июня 2017 в 14:38
6
Вы можете прокомментировать что-то, используя ::
или REM
:
your commands here
:: commenttttttttttt
или
your commands here
REM commenttttttttttt
Чтобы сделать это в той же строке, что и команда, необходимо добавить амперсанд:
your commands here & :: commenttttttttttt
или
your commands here & REM commenttttttttttt
- Использование
::
во вложенной логике (IF-ELSE
,FOR
циклов и т. Д.) Приведет к ошибке. В этих случаях вместо этого используйтеREM
.
Поделиться Pikamander2 21 сентября 2018 в 05:24
2
Вы можете добавить комментарии в конец batch file с помощью этого синтаксиса:
@echo off
:: Start of code
...
:: End of code
(I am a comment
So I am!
This can be only at the end of batch files
Просто убедитесь, что вы никогда не используете закрывающие скобки.
Атрибуция: Лео Гуттирес Рамирес на https:/ / www.robvanderwoude.com / комментарии. php
Поделиться Wasif 12 января 2020 в 16:40
1
Это старая тема, и я хотел бы добавить сюда свое понимание, чтобы расширить знания об этой интересной теме.
Ключевое различие между REM и :: заключается в следующем:
REM-это сама команда, в то время как ::-это NOT.
Мы можем рассматривать :: как маркер, который, как только парсер CMD обнаружит первое непустое место в строке, это маркер ::, он просто пропустит всю строку и прочитает следующую строку. Вот почему за REM должно следовать, по крайней мере, пустое пространство, чтобы иметь возможность функционировать в качестве комментария для строки, в то время как :: не нуждается в пустом пространстве за ней.
То, что REM-это сама команда, лучше всего понять из следующего синтаксиса FOR
Основной синтаксис FOR выглядит следующим образом
FOR %v in (set) DO <Command> [command param]
здесь <Command>
может быть любая допустимая команда
Таким образом, мы можем написать следующую допустимую командную строку, поскольку rem
-это команда
FOR %i in (1,2,3) DO rem echo %i
Однако мы CANNOT пишем следующую строку, так как ::
не является командой
FOR %i in (1,2,3) DO :: echo %i
Поделиться jyao 13 февраля 2019 в 07:12
0
Вы можете использовать ::
или rem
для комментариев.
При комментировании используйте ::
, так как это в 3 раза быстрее. Пример приведен здесь
Только если комментарии находятся в if
, используйте rem
, так как двоеточия могут делать ошибки, потому что они являются меткой.
Поделиться Anic17 14 июня 2020 в 17:01
Похожие вопросы:
Добавить комментарий для использования скрипта python?
Во-первых, я не знаю, есть ли какое-то хорошее правило или обычная практика добавления комментариев для использования скрипта Python. Вот мой вопрос. В скрипте python, с определением функций и…
Как получить комментарий от плагина facebook comment
Я следовал этому руководству, чтобы вызвать функцию, когда делается комментарий. В настоящее время я могу сделать вызов ajax, чтобы взаимодействовать с моим DB, когда делается комментарий. Плагин FB. ..
params[:comment] где автор дает: комментарий?
Я хочу понять, где автор дает: комментарий, который приходит к контроллеру из этой формы <h3>Add a comment:</h3> <%= form_for([@post, @post.comments.build]) do |f| %> <p>…
Как добавить комментарий набора изменений как часть скрипта
При создании набора изменений я получаю ID, который затем могу использовать для назначения комментария набора изменений : scm create changeset scm changeset comment <id_returned_by_create> my…
Добавить комментарий к локализации раскадровки
Можно ли добавить комментарий к локализованной строке в раскадровке ? /* Class = IBUILabel; text = Some text; comment = This is the comment to help translator ObjectID = 0N3-up-Ts6; */…
Запустите batch file в окне externam CMD из PowerShell
У меня есть скрипт PowerShell, который запускается при запуске и создает пару пакетных файлов. fileName…
Как добавить видимый комментарий HTML в JSX?
Я использую ReactJS, и у меня есть требование добавить видимый комментарий HTML (в источнике html) в JSX, но я не уверен, как это сделать. Этот комментарий необходим стороннему поставщику для…
Добавить комментарий к началу документа
Используя ElementTree, как разместить комментарий чуть ниже объявления XML и выше корневого элемента? Я пробовал root.append(comment) , но это помещает комментарий как последнее дитя root . Могу ли…
Как добавить комментарий к ячейке в Excel с помощью Xlwings
Я пытаюсь добавить комментарий к ячейке A1 со следующим кодом, и это приводит к тому, что блокнот jupyter замораживается. При перезапуске я замечаю, что пустой комментарий был вставлен на A1….
|
|
|
rem | Microsoft Docs
- date»>10/16/2017
- Чтение занимает 2 мин
В этой статье
Записывает комментарии в скрипт, пакет или файл config.sys. Если комментарий не указан, REM добавляется пробел по вертикали.
Примечание
Эта команда является внутренней для интерпретатора командной строки cmd.exe.
Синтаксис
rem [<comment>]
Параметры
Параметр | Описание |
---|---|
<comment> | Указывает строку символов, включаемую в качестве комментария. |
/? | Отображение справки в командной строке. |
Remarks
Команда REM не отображает комментарии на экране. Чтобы отобразить комментарии на экране, необходимо включить команду echo on в файл.
<
В комментариях пакетного файла нельзя использовать символ перенаправления (или>
) или pipe (|
).Несмотря на то, что можно использовать REM без комментариев для добавления вертикальных пробелов в пакетный файл, можно также использовать пустые строки. При обработке пакетной программы пустые строки игнорируются.
Примеры
Чтобы добавить вертикальные пробелы через комментарии пакетного файла, введите:
@echo off
rem This batch program formats and checks new disks.
rem It is named Checknew.bat.
rem
rem echo Insert new disk in Drive B.
pause
format b: /v chkdsk b:
Чтобы включить пояснительный комментарий перед командой Prompt в файле config.sys, введите:
rem Set prompt to indicate current directory
prompt $p$g
Чтобы предоставить комментарий о том, что делает сценарий, введите:
rem The commands in this script set up 3 drives.
rem The first drive is a primary partition and is
rem assigned the letter D. The second and third drives
rem are logical partitions, and are assigned letters
rem E and F. )
)
Дополнительная справка
Как закомментировать строку в bat файле
Как добавить комментарии в bat-файл
Windows- Bot
- 25.01.2020
- 9 791
- 2
- 39
- 39
- 0
- Содержание статьи
Описание
При написании bat файлов бывает необходимо оставить в коде комментарии, чтобы в нем потом можно было быстро разобраться спустя время или кому-нибудь другому, кто будет этот файл использовать. В этой статье мы расскажем о том, как вставить комментарий в bat файл
Примеры
Комментарии можно добавить несколькими способами. Первый больше годится для написания больших комментариев, описывающих либо весь пакетный файл, либо несколько больших его блоков. Код выглядит следующим образом:
goto start
--------------------------------------
Этот пакетный файл предназначен
для автоматизации рутинных операций,
выполняемых ночью для синхронизации
содержимого корпоративного ftp-сервера
с ftp-серверами филиалов
--------------------------------------
Пакетный файл написан 01/01/2004
Последнее исправление внесено 10/02/2004
--------------------------------------
И т.д.
:start
Такое написание комментария при запуске пакетного файла передаст управление сразу к команде, следующей за меткой start. За это отвечает оператор перехода goto.
Более простые комментарии (из одной или нескольких строк) можно добавить, начиная строки с команды rem или с двух двоеточий, идущих друг за другом.
rem Этот блок устанавливает соединение с удаленным сервером
rem А это вторая строка с комментарием
:: Этот блок проверяет дату изменения файлов
:: А это вторая строка с комментарием
Комментирование больших пакетных файлов (как, в принципе, и любого кода) — хороший тон, который значительно облегчает процесс разбора этих файлов другими людьми или самим автором по прошествии значительного времени с момента написания.
Добавление Комментарий в Bat-файл — ShellHacks
Bat-файлом в Windows называют текстовый файл, который обычно имеет расширение .bat
и содержит одну или несколько команд командной строки.
Хорошей практикой является комментирование исходного кода в bat-файлах, путем оставления примечаний, объясняющих функциональность каких-либо строк или блоков кода.
Также любую строку или блок кода в bat-файле можно деактивировать, превратив ее в комментарий (закомментировать) и активировать обратно (раскомментировать).
В этой заметке показано, как комментировать bat-файлы в Windows.
Дельный Совет: Узнать код завершения команды/приложения! Читать далее →
Комментирование Bat-файлов
Комментарий в bat-файле может быть оставлен как с помощью двух двоеточий ::
, так и с помощью команды REM
.
Основное отличие состоит в том, что строки, закомментированные командой REM
, будут отображаться во время выполнения bat-файла (можно избежать установив @echo off
), в то время как строки, закомментированные с помощью ::
, отображаться не будут.
Создать комментарий или закомментировать строку кода в bat-файле:
:: This is a comment that won't be printed - или - REM This is a comment that will be printed
Комментарий на одной строке с комментируемым кодом:
ECHO "Hello" & :: This command prints 'Hello' - или - ECHO "Hello" REM This command prints 'Hello'
Блок кода (несколько строк) в bat-файле может быть закомментирован с помощью GOTO
:
GOTO comment ...skip this... :comment
Дельный Совет: Как автоматически отвечать «Yes» или «No» на запросы в Windows PowerShell и CMD! Читать далее →
Как добавить комментарии в bat-файл — b14esh.com
Описание:
При написании большого пакетного файла очень полезно добавлять комментарии к его основным блокам. Это позволит с легкостью разобраться в том, что делают эти блоки по прошествии времени. Комментирование больших пакетных файлов (как, в принципе, и любого кода) — хороший тон, который значительно облегчает процесс разбора этих файлов другими людьми или самим автором по прошествии значительного времени с момента написания. Комментарии можно добавить несколькими способами.
При написании большого пакетного файла очень полезно добавлять комментарии к его основным блокам. Это позволит с легкостью разобраться в том, что делают эти блоки по прошествии времени. Комментирование больших пакетных файлов (как, в принципе, и любого кода) — хороший тон, который значительно облегчает процесс разбора этих файлов другими людьми или самим автором по прошествии значительного времени с момента написания. Комментарии можно добавить несколькими способами. |
Первый:
Больше годится для написания больших комментариев, описывающих либо весь пакетный файл, либо несколько больших его блоков. Код выглядит следующим образом: goto start ————————————— Этот пакетный файл предназначен для автоматизации рутинных операций, выполняемых ночью для синхронизации содержимого корпоративного ftp-сервера с ftp-серверами филиалов ————————————— Пакетный файл написан 01/01/2004 Последнее исправление внесено 10/02/2004 ————————————— И т.д. :start Такое написание комментария при запуске пакетного файла передаст управление сразу к команде, следующей за меткой start. За это отвечает оператор перехода goto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Больше годится для написания больших комментариев, описывающих либо весь пакетный файл, либо несколько больших его блоков.
Код выглядит следующим образом: goto start ————————————— Этот пакетный файл предназначен для автоматизации рутинных операций, выполняемых ночью для синхронизации содержимого корпоративного ftp-сервера с ftp-серверами филиалов ————————————— Пакетный файл написан 01/01/2004 Последнее исправление внесено 10/02/2004 ————————————— И т.д. :start
Такое написание комментария при запуске пакетного файла передаст управление сразу к команде, следующей за меткой start. За это отвечает оператор перехода goto. |
Второй:
Простые комментарии можно добавить, начиная строки с команды rem rem Этот блок устанавливает соединение с удаленным сервером
Простые комментарии можно добавить, начиная строки с команды rem
rem Этот блок устанавливает соединение с удаленным сервером |
Третий:
Более простые комментарии можно добавить, начиная строки сс двух двоеточий, идущих друг за другом. :: Этот блок проверяет дату изменения файлов
Более простые комментарии можно добавить, начиная строки сс двух двоеточий, идущих друг за другом.
:: Этот блок проверяет дату изменения файлов |
Закомментировать строку в bat
Как добавить комментарии в батник?
Простые комментарии можно добавить, начиная строки с команды rem или с двух двоеточий, идущих друг за другом.
rem Этот блок выводит надпись на экран
:: Этот блок выводит надпись на экран
ПРИ НАПИСАНИИ СЛОЖНЫХ БАТНИКОВ
ЖЕЛАТЕЛЬНО КОММЕНТИРОВАТЬ СТРОКИ
ЧТОБ НЕ ЗАПУТАТЬСЯ ИЛИ ЧТОБЫ
БЫЛО ПОНЯТНО ДРУГИМ ПОЛЬЗОВАТЕЛЯМ.
. главная . статьи . программы . разное . гостевая .
. ресурс обмена файлами .
_________________________________________________________
— consigna: Сохраним нашу планету зелёной! («Гринпис») —
FAQ по BATCH в Windows.
«Увидев медведя — не пингуй. Веди себя по умолчанию.»
Q: Что такое BATCH?
A: Пакетные (BACTH — «пакетный») файлы обычно представлены в виде тектовых файлов, которые содержат определённые команды интерпритатора для автоматической обработки системой. В качестве параметров могут выступать, как имена исполняемыйх файлов, так и специальные инструкции: условия, циклы, безусловные переходы. BATCH-файлы могу иметь расширение .BAT (во всех версиях Windows) и .CMD (в линейке Windows NT). BAT-файлы были популярны ещё со времён операционной системы MS-DOS. С приходом Windows некоторые из функциональ- ных особенностей BAT файлов потеряли свою актуальность, но и сейчас можно упростить выполнение многие сложных прикладных задач (копирование, удаление, проверка файла на наличие, сложная компиляция) с помощью конфигурирования
Q: Как создать BATCH файл?
A: BATCH файл можно создать, набрав в любом текстовом редакторе (в «Блокноте» под Windows и Edit под DOS) файл с нужными коммандами и сохранив его с расширением . Z
———————8 >help.txt — в файле help.txt будет находиться содержание справки.
Q: Как закомментировать фрагмент BATCH файла — строку или несколько строк?
A: Для того, чтобы закомментировать одну строчку в файле можно использовать:
———————8 COM1
передаст в устройство на COM1 (на модем) команду набора номера.
———————————————————————————
@
Оператор @ позволяет не выводить следующую за ним команду на экран. Это аналог оператора ECHO OFF только для одной строки.
———————————————————————————
GOTO
Оператор GOTO (подобно оператору GOTO в Бейсике) осуществляет безусловный переход на метку внутри данного файла.
Пример:
GOTO lab
.
lab:
Имя метки носит символический характер, но должно быть уникальным. Оператор «:» может быть использован в качестве комментария.
———————————————————————————
%
В языке BATCH-файлов возможно использование переменных. Всего может быть до 10 одновременно существующих независимых переменных.
Значение переменной равно значению соответствующего параметра из командной строки. Переменная %0 будет содержать имя .bat-файла и, если вы указали, путь к нему. То есть, если у нас есть командная строка abc.bat a bc def то переменная %1 будет содержать значение a, %2 будет содержать bc, а %3 — def.Это свойство широко используется для создания универсальных пакетных файлов при работе с повторяющимися операциями.
Если Вам необходимо более 10 переменных, то возможно использование команды SHIFT Если необходимо передать значение, например, из параметра %1 в %2, то приходится прибегать к некоторым уловкам. Например, можно записать в файле ABC.BAT: ABC.BAT %2 %1
Это вызовет прекращение выполнения данного файла и передаст управление ему же, но с параметрами, записанными в обратном порядке.
———————————————————————————
SHIFT
Команда SHIFT позволяет использовать число параметров командной строки более 10. При этом происходит циклический сдвиг влево и теряются более ранние параметры.
Операция необратима.
———————————————————————————
CALL
Команда CALL позволяет вызвать один пакетный файл из другого, не прекращая выполнения предыдущего. Пример:
@ECHO OFF
ECHO Этот текст выводится
CALL TEST.BAT
ECHO Этот текст тоже выводится
TEST.BAT
ECHO А этот уже не выводится.
При выполнении TEST.BAT обработка текущего пакетного файла была прекращена и управление было передано TEST.BAT.
———————————————————————————
IF
Оператор IF проверяет истинность какого-либо и в зависимости от этого выполняет или не выполняет команду .
Пример:
IF EXIST TEST.BAT GOTO lab1
если существует файл TEST.BAT, то перейти на метку lab1.
IF NOT EXIST TEST.BAT GOTO exit
если файл TEST.BAT не существует, то следует перейти на метку exit.
IF %1==ASDF GOTO asdflabel
если переменная %1 равна ASDF, то осуществляется переход на метку asdflabel.
IF ERRORLEVEL 1 GOTO err1
если ошибка (код возврата) выполнения предыдущей команды равно 1, то перейти на
метку err1.
———————————————————————————
PAUSE
Команда PAUSE приостанавливает выполнение пакетного файла и выдает на экран приглашение нажать на любую клавишу для продолжения работы.
———————————————————————————
FOR % IN ( ) DO
С помощью оператора FOR возможно выполнение одной и той же команды несколько раз для различных параметров.
———————————————————————————
SET =
Оператор SET представляет собой расширение возможностей работы с параметрами в операционной системе. Он задает переменную, значение которой подставляется вместо ее имени при любом использовании этого имени между знаками процента. Наиболее известной является переменная PATH, представляющая собой набор путей для быстрого поиска файлов.
Q: Как можно использовать BAT-файлы для компиляции проектов на ассемблере?
A: Вот несколько каркасных примеров BAT-файла, который выполняет компиляцию проекта на ассемблере.
Компиляция проекта без ресурсов:
————————8
0,3% echo. Month : %date:
4,2% echo.Day : %date:
7,2% echo.Year : %date:
Удаление первого и последнего символа в строке
(часто этот прием используют для удаления окаймляющих кавычек)
Удаление подстроки в строке
В данном примере из строки будет удалена подстрока «кожа «
Удаление всех пробелов в строке
Как вариант предыдущего примера
Замена подстроки в строке
Объединение строк
Удаление ведущих пробелов
Конвертровать большие буквы в маленькие
1 EXIT /b for %%a in («A=a» «B=b» «C=c» «D=d» «E=e» «F=f» «G=g» «H=h» «I=i» «J=j» «K=k» «L=l» «M=m» «N=n» «O=o» «P=p» «Q=q» «R=r» «S=s» «T=t» «U=u» «V=v» «W=w» «X=x» «Y=y» «Z=z» «А=а» «Б=б» «В=в» «Г=г» «Д=д» «Е=е» «Ж=ж» «З=з» «И=и» «К=к» «Л=л» «М=м» «Н=н» «О=о» «П=п» «Р=р» «С=с» «Т=т» «У=у» «Ф=ф» «Х=х» «Ц=ц» «Ч=ч» «Ш=ш» «Щ=щ» «Ь=ь» «Ы=ы» «Ъ=ъ» «Э=э» «Ю=ю» «Я=я») do ( call set %
ЗАМЕНА ОДНОЙ ПОДСТРОКИ НА ДРУГУЮ В ФАЙЛЕ
Для выполнения этой операции можно использовать утилиту sbs2. com
Традиция и дошедший комментарий приписывает авторство Herbert Kleebauer. Получить эту программку можно выполнив следующий бат файл:
x>viH>`[email protected]?sUq`>>sbs2.com
echo [email protected]@A
[email protected]@qBEOEenU?`eHHeBCMs?FExep>>sbs2.com
echo [email protected]>[email protected]?wQpQpKLBHv?s`WJ`LRCYyIWMJaejCksl>>sbs2.com
echo H[GyFGhHBwHZjjHeoFasuFUJeHeB?OsQH[[email protected]@eNc?
>>sbs2.com
echo CK>Ayre
В результате, в папке, где будет запущен приведенный выше текст, создастся файл sbs2.com.
Возможно, вы будете приятно удивлены его размером — 659 БАЙТ!
Те, кому вышеприведенные изыски кажутся излишними, могут скачать готовую утилиту здесь.
Использование:
sbs2.com 0 «Old String» «New String» outfile
Осуществляется замена всех вхождений Old String на New String в файле infile. Результат запишется в файл outfile.
Такую задачу можно решить без использования сторонних программ, только средствами bat !
Ниже приведен пример с использованием локальной процедуры txtrepl
Вывод на экран, в файл текста без перевода строки
В bat/cmd командах не предусмотрена возможность вывода данных без перевода строки. Но для решения такой задачи можно использовать некую уловку.
Команда set с параметром, предусматривающим ввод данных с экрана, позволяет вывести подсказку для ввода без перевода строки. Вот этим мы и воспользуемся.
b.txt
Использование этого приема в сочетании с символом backspace (код 08) позволяет сделать вывод на экран изменяемого текста и как вариант — «вращающейся палки».
Вычисление длины строковой переменной
В bat/cmd командах нет функции, позволяющей вычислять длину строковой переменной. А такая задача возникает не так уж и редко. Однако средств командного языка достаточно, для того что бы решить такую задачу, не прибегая к использованию специальных программ. Рассмотрим несколько вариантов решения данной задачи:
1 :startvarcount if not defined var exit /b set var=%var:
1% set /a %2+=1 goto startvarcount exit /b
Еще один вариант вычисления длины строковой переменной:
1″ GoTo :EOF :StringLenLoop Set /A $StringLen+=1 Call Set $StringChr=%%$StringBuf:
%$StringLen%%% If «»==»%$StringChr%» GOTO :EOF GoTo :StringLenLoop
Еще один способ определения длины строки, как ни странно — достаточно быстрый:
n0. tmp» For %%i In («%TEMP%\%
n0.tmp») Do Set /A z=%%
Ну и, наконец, решение, поразившее меня своей математической лаконичностью:
1!»&rem keep the A up front to ensure we rem get the length and not the upper bound rem it also avoids trouble in case of empty string set «len=0» for /L %%A in (12,-1,0) do ( set /a «len|=1% >» 1 call set sim=%%str:
!BB!,1%% if «!sim!» == «» ( set /a mmax=!BB!) else ( set /a mmin=!BB! ) ) ENDLOCAL & SET /a %
2=%mmin% EXIT /b %mmin%
Получение подстроки.
Если смещение начала подстроки и ее длина являются константами — здесь все достаточно просто и аналогичный пример рассматривался выше:
Прошу прощения, если в качестве значения переменной str я опубликовал чей-то пароль )).
Если же одна или обе эти величины — переменные, то решение будет не столь простое.
Здесь встретиться возможно не совсем обычное применение команды CALL. Немного глубже об этом на странице Полезное в разделе Особенности использования команды CALL. Там же рассмотрен и этот пример.
Итак, рассмотрим возможные решения:
Или как вариант предыдущего
Удаление ведущих и замыкающих пробелов.
%curpos%,1! if «!SUBD!» == «» GoTo :formrez if NOT «!SUBD!» == » » ( if !firstnoblank! == -1 set firstnoblank=!curpos! set lastnoblank=!curpos! ) set /a curpos = !curpos!+1 GoTo :StringLenLoop :formrez set /a n1=!firstnoblank!-1 set /a n2=!lastnoblank!-!firstnoblank!+1 if !firstnoblank! == -1 (set «rez=») else (set rez=!%1:
Комментарии в Bat файлах — CMD \ BAT \ batch файлы — Статьй
Пакетные или batch файлы — это обычные текстовые файлы, содержащие наборы команд интерпритатора и имеющие расширение bat или cmd (cmd работают только в ОС семейства NT).Редактировать такие файлы можно при помощи блокнота или любого другого текстового редактора.
Как добавить комментарии в bat-файл.
При написании большого пакетного файла очень полезно добавлять комментарии к его основным блокам. Это позволит с легкостью разобраться в том, что делают эти блоки по прошествии времени. Комментарии можно добавить несколькими способами. Первый больше годится для написания больших комментариев, описывающих либо весь пакетный файл, либо несколько больших его блоков. Код выглядит следующим образом:
goto start
—————————————
Этот пакетный файл предназначен
для автоматизации рутинных операций,
выполняемых ночью для синхронизации
содержимого корпоративного ftp-сервера
с ftp-серверами филиалов
—————————————
Пакетный файл написан 01/01/2004
Последнее исправление внесено 10/02/2004
—————————————
И т.д.
:start
Такое написание комментария при запуске пакетного файла передаст управление сразу к команде, следующей за меткой start. За это отвечает оператор перехода goto.
Более простые комментарии можно добавить, начиная строки с команды rem или с двух двоеточий, идущих друг за другом.
rem Этот блок устанавливает соединение с удаленным сервером
:: Этот блок проверяет дату изменения файлов
Комментирование больших пакетных файлов (как, в принципе, и любого кода) — хороший тон, который значительно облегчает процесс разбора этих файлов другими людьми или самим автором по прошествии значительного времени с момента написания.
Как добавить комментарии в bat-файл — Windows — Компьютеры — Каталог статей
При написании большого пакетного файла очень полезно добавлять комментарии к его основным блокам. Это позволит с легкостью разобраться в том, что делают эти блоки по прошествии времени.
Комментарии можно добавить несколькими способами. Первый больше годится для написания больших комментариев, описывающих либо весь пакетный файл, либо несколько больших его блоков. Код выглядит следующим образом:
goto start
—————————————
Этот пакетный файл предназначен
для автоматизации рутинных операций,
выполняемых ночью для синхронизации
содержимого корпоративного ftp-сервера
с ftp-серверами филиалов
—————————————
Пакетный файл написан 01/01/2004
Последнее исправление внесено 10/02/2004
—————————————
И т.д.
:start
Такое написание комментария при запуске пакетного файла передаст управление сразу к команде, следующей за меткой start. За это отвечает оператор перехода goto.
Более простые комментарии можно добавить, начиная строки с команды rem или с двух двоеточий, идущих друг за другом.
rem Этот блок устанавливает соединение с удаленным сервером
:: Этот блок проверяет дату изменения файлов
Комментирование больших пакетных файлов (как, в принципе, и любого кода) — хороший тон, который значительно облегчает процесс разбора этих файлов другими людьми или самим автором по прошествии значительного времени с момента написания.
Источник: http://www.windowsfaq.ru/content/view/36/45/
Как «закомментировать» (добавить комментарий) в пакете / cmd?
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
Загрузка…
Пакетные файлы — Комментарии
Пакетные файлы — КомментарииНезависимо от используемого языка программирования или сценариев, всегда полезно вставлять комментарии в сценарии, объясняющие, что следующие строки или блок кода пытаются выполнить, как и / или почему.
Комментарии в командных файлах обычно помещаются в строки, начинающиеся с REM
(REMarks).
Если у вас отключено много строк REM
, это может замедлить COMMAND.COM обработка командного файла.
Как вы, наверное, знаете, COMMAND.COM читает командный файл, выполняет одну командную строку, снова читает командный файл, выполняет следующую командную строку и так далее.
Это означает, что каждая строка комментария вызывает одно дополнительное перечитывание командного файла; Нет проблем при чтении с жесткого диска, но это может замедлить выполнение командного файла с медленных гибких или сетевых дисков.
Обходной путь, который я видел много раз (в былые времена, когда я был молод, и динозавры бродили по Земле, а жесткие диски были 20 МБ), это преобразование строки комментария в метку, начав строку с двоеточия (:).
COMMAND.COM пропускает ярлыки, к которым не нужно переходить.
Этот метод имеет тот недостаток, что ваш командный файл может «случайно» действительно использовать метку для перехода.
Как указывает Марк Стерн в одном из своих пакетных файлов MS-DOS «Советы и уловки», эту проблему можно решить, используя двойное двоеточие (::) в качестве первых символов строки комментария.
Таким образом, метка недействительна, но по-прежнему рассматривается как метка и пропускается (т.е. следующая строка сразу же считывается командой COMMAND.COM, без необходимости повторно открывать командный файл). Это может ускорить чтение больших блоков строк комментариев с медленных (гибких) дисководов.
Тот же трюк работает и в CMD.EXE (командный процессор в Windows NT 4 и более поздних версиях) (хотя насчет OS / 2 не уверен) …
… но с некоторыми ограничениями!
REM
— это настоящая команда , которую можно использовать в любом месте командной строки.
Хотя я сомневаюсь, что есть много пользы от такой команды, как:
ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT REM AUTOEXEC.BAT существует
это является действительным и не будет генерировать сообщение об ошибке ни в одной версии DOS или Windows.
С другой стороны, метки, действительные или недействительные, всегда должны начинаться с первого непробельного символа в командной строке.
REM Строка комментария 1 REM Строка комментария 2 : Label1 : Label2 :: Строка комментария 3 :: Строка комментария 4 ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT REM AUTOEXEC.BAT существует
все разрешены.
Однако
ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT :: AUTOEXEC.BAT существует
приведет к сообщению об ошибке синтаксиса.
Настоящая ловушка — это кодовых блоков , несколько команд сгруппированы в круглых скобках, а интерпретируется CMD.EXE как одна командная строка !
ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 )
приведет к сообщению об ошибке:
) в это время было неожиданным.
и:
ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 :: Строка комментария 3 )
приведет к другому сообщению об ошибке:
Сделай что-нибудь
Система не может найти указанный диск.
То же верно и для циклов FOR.
Попробуйте и убедитесь сами:
FOR %% A IN (1 2 3) DO ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 )
и:
FOR %% A IN (1 2 3) DO ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 :: Строка комментария 3 )
также приведет к сообщениям об ошибках.
Ошибки вызваны метками, используемыми в кодовых блоках.
Что может вызвать удивление, так это то, что следующий код делает безупречной работой:
FOR %% A IN (1 2 3) DO ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 ЭХО Сделай что-нибудь )
Получается, что одиночная строка комментария ::
, сразу , за которой следует непустая строка команды , будет работать даже внутри кодовых блоков!
Источник: обсуждение стилей комментариев на StackOverflow.com
Замените двойные двоеточия операторами REM
, и все эти образцы будут выполняться без сбоев.
Еще лучше вообще не использовать комментарии внутри блоков кода, а вместо этого размещать их непосредственно перед блоками кода:
:: Строка комментария 1 :: Строка комментария 2 :: Строка комментария 3 FOR %% A IN (1 2 3) DO ( ЭХО Сделай что-нибудь )
или:
REM Строка комментария 1 REM Строка комментария 2 REM Строка комментария 3 FOR %% A IN (1 2 3) DO ( ЭХО Сделай что-нибудь )
Тайна:
( REM комментарий1 ECHO comment1 ) (Комментарий REM2 и комментарий ECHO2) Комментарий REM3 и комментарий ECHO3 ECHO comment4
В приведенном выше коде используются 3 кодовых блока, каждый из которых содержит команду REM
, за которой следует команда ECHO
.
За тремя кодовыми блоками следует четвертая «автономная» команда ECHO
.
Предполагается, что 3 блока кода ведут себя более или менее одинаково, по крайней мере, в более старых версиях, таких как Windows NT 4 и 2000 …
Ну, а в Windows 7 нет!
D: \> test_REM_comments_in_code_blocks.bat D: \> ( REM комментарий1 ECHO comment1 ) комментарий1 D: \> D: \>
комментарий1
— единственный комментарий ECHO
ed.
Блок кода для comment2
отображает только пустую строку.
Кодовый блок для comment3
никогда не достигается …
Казалось бы, блок кода для comment2
прерывает командный файл без предупреждения.
Удалите этот блок кода, и остальное будет выполнено, как ожидалось.
Итак, вы, , можете объяснить такое поведение …?
Ответ можно найти в конце этой страницы.
Дополнительная информация по теме:
(Спасибо за Ли Уилбура и Майкла Клемента)
Возможная ловушка, на которую указывает Йост Коп, — это REM
, чтобы закомментировать строку, которая использует перенаправление, например:
REM DIR> файл журнала.журнал
В CMD.EXE (Windows NT 4 и новее) строка полностью игнорируется (как, вероятно, и предполагалось), но COMMAND.COM (MS-DOS, Windows 9x) интерпретирует эту строку как «перенаправить вывод REM
в файл журнала. .log «, таким образом очищая файл logfile.log или создавая файл logfile.log размером 0 байт.
Примечание: | Я хотел бы упомянуть одну ситуацию, когда я всегда предпочитаю REM двойному двоеточию: пакетные файлы для автоматической установки.Почему? Я всегда не использую @ECHO OFF , поскольку тихая установка обычно выполняется в фоновом режиме. Однако при тестировании я буду запускать командные файлы в интерактивном режиме, а затем будут отображаться комментарии REM ed (помните, нет @ECHO OFF ), потому что это команд , а не меток . |
Обобщение:
-
REM
— это соответствующее стандартам документированное заявление для вставки комментариев в командные файлы - двойные двоеточия — это недокументированный и несовместимый способ вставки комментариев; нет гарантии, что они будут работать в будущих версиях Windows
- теоретически, использование двойных двоеточий может ускорить выполнение командных файлов при запуске с медленного диска (например,г. дискета), но я сомневаюсь, что разницу можно обнаружить на современных компьютерах
- для больших блоков комментариев, команда
GOTO
непосредственно перед комментариями, переход к метке сразу после комментариев, является более безопасным и более совместимым со стандартами способом ускорения пакетного выполнения с медленных дисков - , поскольку двойные двоеточия на самом деле являются метками, их следует размещать в начале командной строки; хотя ведущие пробелы разрешены, разрешены, все остальное —
- использование двойных двоеточий внутри кодовых блоков нарушает предыдущее «правило» и обычно приводит к ошибкам (за исключением некоторых особых случаев)
- постарайтесь избегать комментариев внутри кодовых блоков или используйте
REM
, если необходимо (но помните о подводных камнях, если вы используетеREM
) - с КОМАНДОЙ.COM будьте осторожны при использовании
REM
или двойного двоеточия для временного «отключения» командной строки, особенно если она содержит конвейер, перенаправление или переменные - , несмотря ни на что, нет ничего плохого в использовании двойных двоеточий для комментариев , если вы понимаете ограничения
- тестируйте, тестируйте, тестируйте и тестируйте ваши командные файлы, включая строки комментариев, на всех версиях Windows они будут использоваться для
Труба
REM
для блокировки Стандартный ввод Действительно полезный трюк — использовать REM
в сочетании с трубопроводом, как в:
REM | ВЫБОР / C: AB / T: A, 5> NUL
Команда CHOICE сама по себе истечет по тайм-ауту через 5 секунд (/ T), кроме случаев, когда кто-то нажмет клавишу, не указанную в / C, и в этом случае обратный отсчет будет прерван.
Используя REM
и соединяя его (всегда пустой) стандартный вывод со стандартным вводом CHOICE, этот стандартный ввод больше не будет получать нажатия клавиш с консоли (клавиатуры). Таким образом, нажатие кнопки не ускоряет CHOICE
и не останавливает его.
(Я позаимствовал эту технику у «Outsider», одного из «постоянных клиентов» группы новостей alt.msdos.batch, и добавил параметр / C, чтобы сделать его независимым от языка)
Примечание: | Этот трюк будет работать в COMMAND.Только COM, а не в CMD.EXE. В CMD.EXE все, что находится после «команды» REM , считается комментарием, включая символ вертикальной черты. Для CMD.EXE можно использовать следующую команду (Windows XP и новее): Прочтите мою страницу ожидания, чтобы узнать, как установить задержки в Windows NT 4 и более поздних версиях. |
Несколько языков позволяют закомментировать полные блоки кода с помощью «тегов» / *
и * /
.
Rexx, например, будет рассматривать весь текст, помеченный красным, как комментарий:
Скажите: «Эта строка - настоящий код» / * Но это комментарий. И эта линия тоже. И этот... * /
Пакетный язык не имеет блоков комментариев, хотя есть способы добиться эффекта:
@ECHO OFF REM Сделайте что-нибудь • • REM Конец кода REM Начало блока комментариев 1 GOTO EndComment1 Эта строка является комментарием.И эта линия тоже. И этот... : EndComment1
Или, если блок комментария появляется в конце командного файла:
@ECHO OFF REM Сделайте что-нибудь • • REM Конец кода; используйте GOTO: EOF вместо EXIT для Windows NT и более поздних версий ВЫХОД Начало блока комментариев в конце командного файла Эта строка является комментарием. И эта линия тоже. А этот ...
@ECHO OFF REM Сделайте что-нибудь • • REM Конец кода (Начало блока комментариев в конце командного файла Эта строка является комментарием.И эта линия тоже. И этот... Только убедитесь, что вы никогда не используете закрывающую скобку.
Примечание: | У этого приема есть один серьезный недостаток: использование круглых скобок в блоке комментариев не допускается. |
Тайна разгадана
Недавно Васко Рато показал мне решение загадочно исчезающего кода.
Если вы прочитаете уловку Лео Гутьерреса Рамиреса с отсутствующей закрывающей круглой скобкой, вы увидите, что именно это и происходит.
Следующая строка кода:
(REM комментарий2 и ECHO comment2)
эквивалентно
(REM что угодно
, так как все, что следует за оператором REM
, включая закрывающую круглую скобку, является комментарием, т.е. не интерпретируется !
Поскольку в «блоке загадочного кода» после этого комментария не было других круглых скобок, все от открывающей скобки до и оператора REM
до конца кода является блоком комментариев «в стиле Лео Гутьерреса Рамиреса».
Как утверждает Васко: все ведет себя так, как и следовало ожидать.
Спасибо Васко и Лео
последняя загрузка страницы: 2019-03-12, 15:05
.Окна— как эхо и отправить вывод консоли в файл в сценарии bat?
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
Загрузка…
Как пройти каждую строку в текстовом файле с помощью командного файла Windows?
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант
cmd — Как я могу запускать команды в пакетном режиме и сохранять результат в текстовом файле?
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
- Реклама Обратитесь к разработчикам и технологам со всего мира
- О компании
Как передать аргументы в командный файл?
Переполнение стека- Около
- Продукты
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
Как в CMD сменить кодировку? Русский текст в CMD
Как корректно отобразить Русский текст в CMD. Проблемы с кодировкой могут возникнуть, например, при выполнении Bat файла, когда нужно вывести в консоль русский текст и при других обстоятельствах, о которых речь пойдёт далее.
Рассмотрим пример: когда нужно вывести в консоль Русский текст, скажем «Примет мир». Для этого создадим Bat файл с именем «1.bat». Используйте для этого обычный Блокнот Windows (Notepad.exe) Запишем в него следующие строки!
@Echo off echo. echo ПРИВЕТ МИР echo. Pause
@Echo off
echo. echo ПРИВЕТ МИР echo. Pause |
Для тех, кто не понял или не в курсе, строчки «echo.» я добавил специально, что бы были отступы, от строки «Примет мир»
Теперь запускаем файл 1.bat и результат будет такого вида.
Как видим проблема с кодировкой в cmd на лицо. И произошло это по следующей причине.
Стандартный блокнот Windows сохранил Bat файл в кодировке «1251» а консоль вывела его в кодировки «866». Вот от сюда все проблемы!
Решения проблемы с кодировкой в CMD. 1 Способ.
Для решения проблемы нужно просто использовать текстовой редактор, с помощью которого можно сохранить текст в кодировке «866». Для этих целей прекрасно подходит «Notepad++» (Ссылку для загрузки Вы можете найти в моём Twitter-e).
Скачиваем и устанавливаем на свой компьютер «Notepad++».
После запуска «Notepad++» запишете в документ те же строки, которые мы уже ранние записывали в стандартный блокнот.
@Echo off echo. echo ПРИВЕТ МИР echo. Pause
@Echo off
echo. echo ПРИВЕТ МИР echo. Pause |
Теперь осталось сохранить документ с именем «2.bat» в правильной кодировке. Для этого идём в меню «Кодировки > Кодировки > Кириллица > OEM-866»
и теперь сохраняем файл с именем «2.bat» и запускаем его! Поле запуска результат на лицо.
Как видим, текст на Русском в CMD отобразился, как положено.
Решения проблемы с кодировкой в CMD. 2 Способ.
Теперь рассмотрим ещё одну ситуацию, когда могут возникнуть проблемы с кодировкой в CMD.
Допустим, ситуация требует сохранить результат выполнения той или иной команды в обычный «TXT» файл. В приделах этого поста возьмём для примера команду «HELP».
Задача: Сохранить справку CMD в файл «HelpCMD.txt. Для этого создайте Bat файл и запишите в него следующие строки.
@Echo off Help > C:\HelpCMD.txt Pause
@Echo off
Help > C:\HelpCMD.txt Pause |
После выполнения Bat файла в корне диска «C:\» появится файл «HelpCMD.txt» и вместо справки получится вот что:
Естественно, такой вариант не кому не понравится и что бы сохранить справку в понятном для человека виде, допишите в Bat файл строку.
Теперь содержимое кода будет такое.
@Echo off chcp 1251 >nul Help > C:\HelpCMD.txt Pause
@Echo off chcp 1251 >nul
Help > C:\HelpCMD.txt
Pause |
После выполнения «Батника» результат будет такой:
Вот так на много лучше, правда?
Пожалуй, на этом я закончу пост. Добавить больше нечего. Если у Вас имеются какие-то соображения по данной теме, буду рад Вашему комментарию к посту.
Дополнительно из комментариев то Garric
Автор очень хорошо описал принцип. ! Но это неудобно.
Нужно бы добавить. Если автор добавит это в статью то это будет Good.
Создаём файл .reg следующего содержания:
——
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.bat\ShellNew]
«FileName»=»BATНастроенная кодировка.bat»
——
Выполняем.
——
Топаем в %SystemRoot%\SHELLNEW
Создаём там файл «BATНастроенная кодировка.bat»
Открываем в Notepad++
Вводим любой текст. (нужно!) Сохраняемся.
Удаляем текст. Меняем кодировку как сказано в статье. Сохраняемся.
———-
Щёлкаем правой кнопкой мыши по Рабочему столу. Нажимаем «Создать» — «Пакетный файл Windows».
Переименовываем. Открываем в Notepad++. Пишем батник.
В дальнейшем при работе с файлом не нажимаем ничего кроме как просто «Сохранить». Никаких «Сохранить как».
Как мне оставлять комментарии в командной строке Windows?
Как мне оставлять комментарии в командной строке Windows? — СуперпользовательСеть обмена стеков
Сеть Stack Exchange состоит из 178 сообществ вопросов и ответов, включая Stack Overflow, крупнейшее и пользующееся наибольшим доверием онлайн-сообщество, где разработчики могут учиться, делиться своими знаниями и строить свою карьеру.
Посетить Stack Exchange- 0
- +0
- Авторизоваться Подписаться
Super User — это сайт вопросов и ответов для компьютерных энтузиастов и опытных пользователей.Регистрация займет всего минуту.
Зарегистрируйтесь, чтобы присоединиться к этому сообществуКто угодно может задать вопрос
Кто угодно может ответить
Лучшие ответы голосуются и поднимаются наверх
Спросил
Просмотрено 156k раз
Что эквивалентно #
для сеансов консоли Windows cmd
для создания комментария?
Операционная система — Windows XP.
задан 12 дек ’09 в 10: 472009-12-12 10:47
Эндрю Гримм Эндрю Гримм2,955 золотых знаков2929 серебряных знаков3636 бронзовых знаков
3 REM
стандартный способ:
REM это комментарий
Вы также можете использовать соглашение о двойном двоеточии, обычно встречающееся в пакетных файлах:
:: еще один комментарий
Одно двоеточие, за которым следует строка, является меткой, но двойное двоеточие и все, что после него, игнорируются.Можно утверждать, что эта форма более разборчива, чем команда REM
.
Обратите внимание, что оба этих метода работают только в начале строки. Если вы хотите добавить комментарий к команде, вы можете использовать их с символом объединения команд ( и
), например:
dir & REM комментарий
dir & :: еще один
ответ дан 12 дек ’09 в 11: 512009-12-12 11:51
эфотинис3,93411 золотых знаков1919 серебряных знаков2222 бронзовых знака
7Вы ставите перед комментарием слово REM.
REM Это комментарий.
Но если вы хотите, чтобы ваш комментарий напечатали вам, вы должны повторить его:
echo Это комментарий, который вы увидите.
ответ дан 12 дек ’09 в 10: 502009-12-12 10:50
Бернхард Хофманн57422 золотых знака77 серебряных знаков1919 бронзовых знаков
1 REM
только команда отмечает (т.е.е. Скажите что-нибудь в качестве комментария) строка из выполняемой. Однако, если @echo off
отсутствует в пакетном файле, эта строка все равно будет отображаться на экране.
Чтобы запретить отображение этих строк, вы можете сделать одно из трех.
- Добавить @echo off в командный файл :
Если вы хотите скрыть все команды, а также строки REM, добавьте @echo off в качестве первой строки в командном файле. - Измените REM на @REM :
Если вы хотите, чтобы команды отображались при запуске командного файла, но все же хотите скрыть строки REM, введите @REM вместо REM. - Используйте: 🙁 т.е. недопустимую метку) вместо REM :
Наконец, использование :: в качестве команды примечания вместо REM также предотвращает эхо отмеченной строки.
источник
Создан 24 марта ’16 в 15: 542016-03-24 15:54
Премрай1,72622 золотых знака1515 серебряных знаков2424 бронзовых знака
Я считаю, что ответ Бернхарда неверен.
По крайней мере, до выигрыша 7,
rem комментарий
в пакетном файле будет печататься на выходе. Для подавления печати используйте
@ rem комментарий
или
@rem комментарий
То же самое и с другими командами, которые по умолчанию выводятся на консоль.
Создан 22 ноя.
pbpbpbpb3944 бронзовых знака
3Все, что началось после выхода (в скобках), считается комментарием:
КОД REM
выход / б 0
(Привет
Я комментарий
Я тоже такой же
Создан 17 сен.
Очень активный вопрос .Заработайте 10 репутации (не считая бонуса ассоциации), чтобы ответить на этот вопрос. Требование репутации помогает защитить этот вопрос от спама и отсутствия ответов. Суперпользователь лучше всего работает с включенным JavaScriptВаша конфиденциальность
Нажимая «Принять все файлы cookie», вы соглашаетесь с тем, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Принимать все файлы cookie Настроить параметры
Как «закомментировать» (добавить комментарий) в пакете / cmd?
Комментарий к строке
Для комментирующей строки используйте REM или :: хотя ::
может не работать внутри скобок
в строках с задержкой расширения, начинающихся с ! <Разделитель>
, будет проигнорирован, поэтому его можно использовать для комментариев:
@ эхо выкл.
setlocal enableDelayedExpansion
активировано расширение с задержкой эха
!; отложенная строка комментария к расширению
эхо конец демонстрации
Комментарий в конце строки
Для комментариев в конце строки вы снова можете использовать rem
и ::
в сочетании с и
:
echo --- & :: comment (не должна быть последней строкой в скрипте)
echo --- & rem комментарий
Комментарий в конце файла
Поскольку заметка будет проанализирована после команды exit
, вы можете использовать ее для добавления комментариев в конец файла:
@ эхо выкл.
эхо-команды
выход / б
-------------------
комментирует в конце
файла
------------------
Встроенные комментарии
Расширение несуществующих переменных заменяется ничем, и, поскольку установка переменной с =
довольно сложна, вы можете использовать это для встроенных комментариев:
@ эхо выкл.
echo long command% = это комментарий =% со встроенным комментарием
Многострочные комментарии
Для многострочных комментариев можно использовать GOTO
(для внешних скобок) и REM
с условным исполнением (для внутренних скобок).Подробнее здесь:
@ эхо выкл.
сценарий запуска эха
goto: end_comments
Комментируемая линия
еще одна прокомментированная строка
: end_comments
эхо продолжить сценарий
(
эхо-демонстрация выключена
rem / || (
линии с
Комментарии
)
эхо многострочный комментарий внутри
эхо-скобки
)
И та же техника, украшенная макросами:
@ эхо выкл.
:: Макрос GOTO comment
установить "[: = goto:] %%"
:: скобки комментируют макросы
установить "[= rem / || (" & set "] =)"
:: тестирование
эхо без комментариев 1
% [:%
мульти
линия
комментарий вне скобок
%:]%
эхо без комментариев 2
% [:%
второй мульти
линия
комментарий вне скобок
%:]%
:: Макрос GOTO нельзя использовать внутри для
для %% a в (первая секунда) сделайте (
echo первая не прокомментированная строка выполнения %% a
% [%
многострочный
комментарий
%]%
echo вторая не прокомментированная строка выполнения %% a
)
Как «закомментировать» (добавить комментарий) в пакете / cmd?
Комментарий к строке
Для комментирующей строки используйте REM или :: хотя ::
может не работать внутри скобок
в строках с задержкой расширения, начинающихся с ! <Разделитель>
, будет проигнорирован, поэтому его можно использовать для комментариев:
@ эхо выкл.
setlocal enableDelayedExpansion
активировано расширение с задержкой эха
!; отложенная строка комментария к расширению
эхо конец демонстрации
Комментарий в конце строки
Для комментариев в конце строки вы снова можете использовать rem
и ::
в сочетании с и
:
echo --- & :: comment (не должна быть последней строкой в скрипте)
echo --- & rem комментарий
Комментарий в конце файла
Поскольку заметка будет проанализирована после команды exit
, вы можете использовать ее для добавления комментариев в конец файла:
@ эхо выкл.
эхо-команды
выход / б
-------------------
комментирует в конце
файла
------------------
Встроенные комментарии
Расширение несуществующих переменных заменяется ничем, и, поскольку установка переменной с =
довольно сложна, вы можете использовать это для встроенных комментариев:
@ эхо выкл.
echo long command% = это комментарий =% со встроенным комментарием
Многострочные комментарии
Для многострочных комментариев можно использовать GOTO
(для внешних скобок) и REM
с условным исполнением (для внутренних скобок).Подробнее здесь:
@ эхо выкл.
сценарий запуска эха
goto: end_comments
Комментируемая линия
еще одна прокомментированная строка
: end_comments
эхо продолжить сценарий
(
эхо-демонстрация выключена
rem / || (
линии с
Комментарии
)
эхо многострочный комментарий внутри
эхо-скобки
)
И та же техника, украшенная макросами:
@ эхо выкл.
:: Макрос GOTO comment
установить "[: = goto:] %%"
:: скобки комментируют макросы
установить "[= rem / || (" & set "] =)"
:: тестирование
эхо без комментариев 1
% [:%
мульти
линия
комментарий вне скобок
%:]%
эхо без комментариев 2
% [:%
второй мульти
линия
комментарий вне скобок
%:]%
:: Макрос GOTO нельзя использовать внутри для
для %% a в (первая секунда) сделайте (
echo первая не прокомментированная строка выполнения %% a
% [%
многострочный
комментарий
%]%
echo вторая не прокомментированная строка выполнения %% a
)
Пакетный файл— Как отображать эхо разными цветами в командной строке Windows
Я добавляю ответ, чтобы решить проблему, отмеченную в некоторых комментариях выше: встроенные цветовые коды ANSI могут неправильно работать внутри цикла FOR (фактически, в любом блоке кода в скобках). Приведенный ниже код .bat демонстрирует (1) использование встроенных цветовых кодов, (2) цветовой сбой, который может произойти, когда встроенные цветовые коды используются в цикле FOR или внутри блока кода в скобках, и (3) решение к проблеме. Когда выполняется код .bat, тесты 2 и 3 демонстрируют сбой цветового кода, а тест 4 не показывает сбоев, потому что он реализует решение.
[РЕДАКТИРОВАТЬ 2020-04-07: Я нашел другое решение, которое предположительно более эффективно, чем вызов подпрограммы.Заключите фразу FINDSTR в скобки, как в следующей строке:
эхо успеха | (findstr / R успех)
КОНЕЦ]
Примечание. По моему (ограниченному) опыту, проблема с цветовым кодом проявляется только после того, как ввод передается в FINDSTR внутри блока кода. Вот как следующий .bat воспроизводит проблему. Возможно, проблема с цветовым кодом носит более общий характер, чем после подключения к FINDSTR. Я был бы признателен, если бы кто-то смог объяснить природу проблемы и если бы есть лучший способ ее решить.
@goto: главная
: resetANSI
ВЫХОД / B
rem Подпрограмма resetANSI используется для исправления цветового кода.
rem, хотя кажется, что он ничего не делает.
:главный
@ эхо выкл
setlocal EnableDelayedExpansion
rem Определите несколько полезных переменных цветового кода:
for / F "delims = #" %% E in ('"prompt # $ E # & for %% E in (1) do rem"') установить "ESCchar = %% E"
установите "зеленый =% ESCchar% [92 м"
установите "желтый =% ESCchar% [93m"
установите "magenta =% ESCchar% [95m"
установите "голубой =% ESCchar% [96 м"
установите "white =% ESCchar% [97m"
установите "черный =% ESCchar% [30 м"
echo% white% Тест 1 НЕ входит в цикл FOR и не заключен в круглые скобки, и цвет работает правильно.echo% yellow% [Test 1]% green% Это зеленый цвет,% magenta% - пурпурный, а% yellow% - желтый.
echo% Затем строка 'success' будет передана в FINDSTR ...
эхо успеха | findstr / R успех
echo% magenta% Это пурпурный цвет, FINDSTR обнаружен и отображается как «успешно».% желтый%
echo% green% Это зеленый цвет.
echo% cyan% Тест 1 завершен.
echo% white% Тест 2 заключен в круглые скобки, и цвет перестает работать после перехода к FINDSTR.
(echo% yellow% [Test 2]% green% Это зеленый цвет,% magenta% - пурпурный, а% yellow% - желтый.echo% Затем строка 'success' будет передана в FINDSTR ...
эхо успеха | findstr / R успех
echo% magenta% Предполагается, что это пурпурный цвет, и функция FINDSTR найдена и отображается как «успешно».
echo% green% Предполагается, что это зеленый цвет.
)
echo% cyan% Тест 2 завершен.
echo% white% Тест 3 находится в цикле FOR, и цвет перестает работать после перехода к FINDSTR.
для / L %% G в (3,1,3) do (
echo% yellow% [Test %% G]% green% Это зеленый цвет,% magenta% - пурпурный, а% yellow% - желтый.
echo% Затем строка «успех» будет передана в FINDSTR...
эхо успеха | findstr / R успех
echo% magenta% Предполагается, что это пурпурный цвет, и функция FINDSTR найдена и отображается как «успешно».
echo% green% Предполагается, что это зеленый цвет.
)
echo% cyan% Тест 3 завершен.
echo% white% Тест 4 находится в цикле FOR, но цвет работает правильно, потому что подпрограмма: resetANSI
echo вызывается после канала к FINDSTR, прежде чем будет использован следующий цветовой код.
для / L %% G в (4,1,4) do (
echo% yellow% [Test %% G]% green% Это зеленый цвет,% magenta% - пурпурный, а% yellow% - желтый.echo% Затем строка 'success' будет передана в FINDSTR ...
эхо успеха | findstr / R успех
звоните: resetANSI
echo% magenta% Это пурпурный цвет, и функция FINDSTR обнаружена и отображается как «успешно».
echo% green% Это зеленый цвет.
)
echo% cyan% Тест 4 завершен.% white%
ВЫХОД / B
cmd | Команда Rem — GeeksforGeeks
Rem (сокращение от , примечание ) — это команда (внутренняя), находящаяся в командной строке командного процессора Windows , которая позволяет включать комментарии в пакетные программы.Комментарии поддерживаются большинством языков программирования обычно через специальный синтаксис, связанный с ними. Бывший. Python использует знак решетки / хэштег (#) для обозначения встроенного комментария. Команда Rem предназначена для встроенных комментариев , поэтому комментарий будет действителен только до конца текущей строки (или первого появления CRLF ). Хотя многострочные комментарии могут быть созданы с помощью нескольких команд Rem в отдельных строках. В этой статье мы рассмотрим команду Rem и узнаем о различных ее применениях.
Описание команды:
Записывает комментарии (примечания) в пакетный файл или в файл CONFIG.SYS. REM [комментарий]
* Вышеупомянутый вывод можно получить, выполнив rem /? Команда в командной строке
Использование команды:
Комментарии обычно используются для добавления дополнительных сведений в код. Это помогает понять, о чем думал создатель кода, когда писал его. Это также полезно для предоставления некоторых указателей или дополнений, связанных с кодом.Комментарии в целом помогают снизить сложность кода, будучи своего рода удобочитаемой формой кода. Они также помогают направлять читателей, не знающих язык. Например, давайте взглянем на следующий фрагмент кода:
@echo off эхо% ~ f0 эхо% ~ t0
Для тех, кто никогда не видел вышеупомянутого синтаксиса, код сначала может показаться довольно загадочным. Но если к коду добавлены комментарии:
REM Используется для отключения эха ввода команды и текущего рабочего каталога @ эхо выкл REM Отображение полного пути (абсолютного пути) к этому файлу эхо% ~ f0 REM Отображение метки времени создания этого файла эхо% ~ t0
Код становится понятным в отношении его функциональности, и можно легко провести через его работу.
Создание встроенных комментариев:
Встроенные комментарии можно создать, используя команду REM в начале строки и затем вводя комментарий.
Например,
REM Этот код отобразит привет, мир эхо привет мир!
Встроенные комментарии также могут быть добавлены в конец строки (им предшествует некоторый код) с помощью конструкции & REM.
Например,
echo Hello World! & REM Этот код отобразит привет, мир
Создание многострочных комментариев:
Многострочные комментарии могут быть созданы с помощью нескольких команд rem, которые охватывают несколько строк.
Например,
REM Этот код покажет текущее время. REM Разрешение времени до миллисекунд. REM Время будет основано на текущем часовом поясе эхо | время
Примечание —
Комментарий можно создать и другими способами. Бывший. Существуют и другие типы комментариев ~ , которые позволяют добавлять комментарии между операторами. Но они не являются документированным способом комментирования кода и существуют благодаря обходным путям других команд / синтаксисов.Кроме того, это выходит за рамки данной статьи.
Вниманию читателя! Не прекращайте учиться сейчас. Получите все важные концепции теории CS для собеседований SDE с CS Theory Course по приемлемой для студентов цене и будьте готовы к работе в отрасли.
Rem — Комментарий — Windows CMD
Rem — Комментарий — Windows CMD — SS64.comВ пакетном файле REM в начале строки означает комментарий или ЗАМЕЧАНИЕ.
Альтернативой является добавление :: at начало строки, это имеет тот же эффект, что и REM.Двойные двоеточия действуют как GOTO или CALL: метка второго двоеточия недопустима как имя, но все равно рассматривается как метка, и поэтому строка всегда пропускается.
Например:
@ECHO OFF
::
:: Первый комментарий
REM Второй комментарий
REM
Echo Hello REM Это примечание отображается с помощью echo
Echo Hello & REM Это замечание игнорируется echo
Скопируйте work.xls backup.xls & :: Мы создали резервную копию файла
Хотя вы можете использовать REM без комментария, чтобы добавить вертикальный интервал в пакет
файл, вы также можете использовать полностью пустые строки.Пустые строки игнорируются при обработке
пакетная программа.
Двойное двоеточие :: не задокументировано как команда комментария. Важным ограничением этого является то, что в качестве метки его можно использовать только в начале строки. Кроме того, поскольку двойное двоеточие является командой, оно будет отображаться, если вы запустите командный файл без @ECHO OFF
. REM-комментарий обрабатывается немного медленнее, чем :: (360 мкс против 58 мкс на строку комментария)
Комментарий REM — это задокументированная команда, которую можно использовать практически в любом месте командной строки.
C: \> Echo Это будет работать REM Echo Но будет ли это отображаться
Это будет работать REM Echo Но будет ли это отображаться
Вы можете добавить комментарий в конец командной строки, используя & REM или & ::
C: \> Echo Это будет работать & :: Echo, это не покажет
Это будет работать
Этот подход работает, потому что ‘&’ вводит новую команду в той же строке.
Многострочные комментарии
Один из подходов к добавлению большого многострочного блока комментариев — использование простого текста и команды goto для перехода к выполнению за пределами комментариев:
@ Эхо ВЫКЛ. Перейти: STARTОписание можно посмотреть здесь который может даже включать - | > персонажи : STARTПриведенный выше прием не будет работать в середине выражения в квадратных скобках, например FOR… DO (…) цикл.
Это потому, что Команду Goto нельзя использовать внутри скобок — это нарушит их контекст.В таких случаях можно также заключить текст комментария в квадратные скобки, как показано ниже:
( Эхо, строки ниже прокомментированы Рем / || ( некоторый текст комментария, который будет работать в скобках. Команда REM всегда принимает значение ИСТИНА, поэтому эти строки никогда не будут выполнены. ) )
Комментарии в квадратных скобках кодовых блоков.
Когда :: метки используются в качестве комментариев внутри блока кода в квадратных скобках или команды FOR, командный процессор будет ожидать (не без оснований), что за каждой меткой следует по крайней мере одна команда. (Таким образом, если вы перейдете к метке, у нее будет что выполнить.) Фактически оболочка CMD попытается выполнить вторую строку, даже если она отформатирована как метка.
Все, что не является допустимой командой, даже пустая строка или закрывающая скобка, приведет к сбою комментария :: style:( Echo Этот пример завершится ошибкой :: комментарий )(
: NormalLabel & Echo, это не будет выполнено.
: SecondaryLine & Echo Это будет выполнено.
)При работе в круглых скобках безопаснее использовать REM для всех строк комментариев.
( REM something & Echo, это не будет выполнено. REM somethingelse & Echo Это также не будет выполнено. )Однако они должны быть в отдельной строке в скобках:
(REM My comment & ECHO Something else)
Строка выше эквивалентна:
(REM
REM стирает все последующее, включая закрывающую скобку, которая обычно нарушает скрипт.
Ошибки
Комментарий, подобный приведенным ниже примерам, будет интерпретироваться как команда и приведет к фатальной ошибке:
::% ~
или
REM% ~или аналогично с переменной
установить var = demo
rem% var: =
или
rem% var: * =
При возникновении ошибок вся дальнейшая пакетная обработка прерывается и возвращается сообщение об ошибке:
Следующее использование оператора пути при подстановке пакетных параметров: недействительно:% ~Такое поведение является результатом правил пакетного анализа, используемых CMD.EXE и так вряд ли когда-нибудь поменяется.
Чтобы избежать этих проблем, убедитесь, что ваши комментарии не содержат символов%.
Встроенные комментарии
Мы рассмотрели добавление комментария всей строки и добавление комментария в конце строки, но иногда возникает необходимость добавить небольшой комментарий в середине строки, чтобы объяснить некоторые детали.
Имена пакетных переменных могут содержать пробелы и знаки препинания, мы можем воспользоваться этим фактом, введя наш комментарий как несуществующую переменную.Поскольку его не существует, эта переменная будет расширена до нуля и не будет иметь никакого эффекта при запуске скрипта.
н.б. Это работает только в пакетных файлах, а не непосредственно в командной строке.
Чтобы быть уверенным, что мы случайно не выбрали имя, которое на самом деле является реальной переменной, начните и закончите комментарий с «=»
@ Эхо выключено
Echo Это пример% = Inline Comment =% в середине строки.(имена переменных, начинающиеся с «=», зарезервированы для недокументированных динамических переменных.Эти динамические переменные никогда не заканчиваются знаком «=», поэтому использование знака «=» как в начале, так и в конце нашего комментария исключает возможность конфликта имен.)
Ограничения: текст комментария не может содержать% или:
Комментарии реестра
В реестре .REG комментариям к файлам может предшествовать;
;
; Включите NUMLOCK при входе в систему
;
[HKEY_CURRENT_USER \ Панель управления \ Клавиатура]
«InitialKeyboardIndicators» = «2»
FTP Комментарии
Нет допустимого символа комментария для FTP, но вы можете обмануть перейдя в оболочку и запустив REM
е.грамм.C: \ WORK> введите ftpscript
! REM Это замечание
до свиданияC: \ РАБОТА> ftp -s: ftpscript
ftp>! REM Это замечание
ftp> покаC: \ РАБОТА>
REM не устанавливает и не сбрасывает уровень ошибки.
REM — это внутренняя команда.
« Я терпеть не могу открытую лампочку, как и грубое замечание или вульгарное действие » ~ Теннесси Уильямс
Связанные команды:
В текстовом редакторе Notepad ++ вы можете добавить REM в начало нескольких строк: выделите их и нажмите Ctrl-Q
Эквивалент PowerShell: # — Комментарий / Замечание.
Эквивалентная команда bash: # — Комментарий / Замечание.
Авторские права © 1999-2021 SS64.com
Некоторые права защищены
Пакетные файлы — Комментарии
Пакетные файлы — КомментарииНезависимо от используемого языка программирования или сценариев, всегда рекомендуется вставлять комментарии в сценарии, объясняющие, что следующие строки или блок кода пытаются выполнить, как и / или почему.
Комментарии в командных файлах обычно помещаются в строки, начинающиеся с REM
(REMarks).
Если у вас отключено много строк REM
, это может замедлить обработку командного файла COMMAND.COM.
Как вы, наверное, знаете, COMMAND.COM читает командный файл, выполняет одну командную строку, снова читает командный файл, выполняет следующую командную строку и так далее.
Это означает, что каждая строка комментария вызывает одно дополнительное перечитывание командного файла; Нет проблем при чтении с жесткого диска, но это может замедлить выполнение командного файла с медленных дискет или сетевых дисков.
Обходной путь, который я видел много раз (в былые времена, когда я был молод, и динозавры бродили по Земле, а жесткие диски были 20 МБ), это преобразовать строку комментария в метку, начав строку с двоеточия (:).
COMMAND.COM пропускает ярлыки, к которым не нужно переходить.
Этот метод имеет тот недостаток, что ваш командный файл может «случайно» использовать метку для перехода.
Как указывает Марк Стерн в одном из своих пакетных файлов MS-DOS «Советы и уловки», эту проблему можно решить, используя двойное двоеточие (::) в качестве первых символов строки комментария.
Таким образом, метка недействительна, но по-прежнему рассматривается как метка и пропускается (т.е. следующая строка сразу же считывается COMMAND.COM, без необходимости повторно открывать командный файл). Это может ускорить чтение больших блоков строк комментариев с медленных (гибких) дисководов.
Этот же трюк работает и в CMD.EXE (командный процессор в Windows NT 4 и более поздних версиях) (хотя насчет OS / 2 не уверен) …
… но с некоторыми ограничениями!
REM
— это настоящая команда , которую можно использовать в любом месте командной строки.
Хотя я сомневаюсь, что есть много пользы от такой команды, как:
ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT REM AUTOEXEC.BAT существует
это является действительным и не будет генерировать сообщение об ошибке ни в какой версии DOS или Windows.
С другой стороны, метки, независимо от того, действительны они или нет, всегда должны начинаться с первого непробельного символа в командной строке.
REM Строка комментария 1 REM Строка комментария 2 : Label1 : Label2 :: Строка комментария 3 :: Строка комментария 4 ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT REM AUTOEXEC.BAT существует
все разрешены.
Однако
ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT :: AUTOEXEC.BAT существует
приведет к сообщению об ошибке синтаксиса.
Настоящая ловушка — это кодовых блоков , несколько команд сгруппированы в круглых скобках, а интерпретируется CMD.EXE как одна командная строка !
ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 )
приведет к сообщению об ошибке:
) в это время было неожиданным.
и:
ЕСЛИ СУЩЕСТВУЕТ C: \ AUTOEXEC.BAT ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 :: Строка комментария 3 )
приведет к другому сообщению об ошибке:
Сделай что-нибудь
Система не может найти указанный диск.
То же верно и для циклов FOR.
Попробуйте и убедитесь сами:
FOR %% A IN (1 2 3) DO ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 )
и:
FOR %% A IN (1 2 3) DO ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 :: Строка комментария 3 )
также приведет к сообщениям об ошибках.
Ошибки вызваны метками, используемыми в кодовых блоках.
Что может вызвать удивление, так это то, что следующий код делает работу безупречной:
FOR %% A IN (1 2 3) DO ( :: Строка комментария 1 ЭХО Сделай что-нибудь :: Строка комментария 2 ЭХО Сделай что-нибудь )
Оказывается, одиночная строка комментария ::
, сразу , за которой следует непустая строка команды , будет работать даже внутри блоков кода!
Источник: обсуждение стилей комментариев на StackOverflow.com
Замените двойные двоеточия операторами REM
, и все эти образцы будут выполняться без сбоев.
Еще лучше вообще не использовать комментарии внутри блоков кода, а вместо этого размещать их непосредственно перед блоками кода:
:: Строка комментария 1 :: Строка комментария 2 :: Строка комментария 3 FOR %% A IN (1 2 3) DO ( ЭХО Сделай что-нибудь )
или:
REM Строка комментария 1 REM Строка комментария 2 REM Строка комментария 3 FOR %% A IN (1 2 3) DO ( ЭХО Сделай что-нибудь )
Тайна:
( REM комментарий1 ECHO comment1 ) (Комментарий REM2 и комментарий ECHO2) Комментарий REM3 и комментарий ECHO3 ECHO comment4
В приведенном выше коде используются 3 кодовых блока, каждый с командой REM
, за которой следует команда ECHO
.
За тремя кодовыми блоками следует четвертая «автономная» команда ECHO
.
Предполагается, что 3 блока кода будут вести себя более или менее одинаково, по крайней мере, в более старых версиях, таких как Windows NT 4 и 2000 …
Ну, а в Windows 7 нет!
D: \> test_REM_comments_in_code_blocks.bat D: \> ( REM комментарий1 ECHO comment1 ) комментарий1 D: \> D: \>
комментарий1
единственный комментарий ECHO
ed.
Блок кода для comment2
отображает только пустую строку.
Кодовый блок для комментария 3
никогда не достигается …
Казалось бы, блок кода для comment2
прерывает командный файл без предупреждения.
Удалите этот блок кода, а остальное будет выполнено, как ожидалось.
Итак, вы, , можете объяснить такое поведение …?
Ответ можно найти в конце этой страницы.
Дополнительная информация по теме:
(Спасибо за Ли Уилбура и Майкла Клемента)
Возможная ловушка, на которую указал Йост Коп, — это REM
, чтобы закомментировать строку, которая использует перенаправление, например:
REM DIR> файл журнала.журнал
В CMD.EXE (Windows NT 4 и новее) строка полностью игнорируется (как, вероятно, и предполагалось), но COMMAND.COM (MS-DOS, Windows 9x) интерпретирует эту строку как «перенаправление вывода REM
в файл журнала. .log «, таким образом очищая файл logfile.log или создавая файл logfile.log размером 0 байт.
Примечание: | Я хотел бы упомянуть одну ситуацию, когда я всегда предпочитаю REM двойному двоеточию: командные файлы для автоматической установки.Почему? Я всегда не использую @ECHO OFF , поскольку тихая установка обычно выполняется в фоновом режиме. Однако при тестировании я буду запускать командные файлы в интерактивном режиме, а затем будут отображаться комментарии REM ed (помните, нет @ECHO OFF ), потому что это команды , а не меток . |
Обобщение:
-
REM
— это соответствующее стандартам документированное заявление для вставки комментариев в пакетные файлы - двойные двоеточия — это недокументированный и несовместимый способ вставки комментариев; нет гарантии, что они будут работать в будущих версиях Windows
- теоретически использование двойных двоеточий может ускорить выполнение командных файлов при запуске с медленного диска (например,грамм. дискета), но я сомневаюсь, что разницу можно будет обнаружить на современных компьютерах
- для больших блоков комментариев, команда
GOTO
непосредственно перед комментариями, переход к метке сразу после комментариев, является более безопасным и более совместимым со стандартами способом ускорить пакетное выполнение с медленных дисков - , поскольку двойные двоеточия на самом деле являются метками, их следует размещать в начале командной строки; хотя ведущие пробелы разрешены, разрешены, больше ничего не равно
- использование двойных двоеточий внутри кодовых блоков нарушает предыдущее «правило» и обычно приводит к ошибкам (за исключением некоторых особых случаев)
- старайтесь избегать комментариев внутри блоков кода или используйте
REM
, если необходимо (но помните о подводных камнях, если вы используетеREM
) - с КОМАНДОЙ.COM будьте осторожны при использовании
REM
или двойного двоеточия для временного «отключения» командной строки, особенно если она содержит конвейер, перенаправление или переменные - , несмотря ни на что, нет ничего плохого в использовании двойных двоеточий для комментариев , если вы понимаете ограничения
- тестируйте, тестируйте, тестируйте и тестируйте ваши командные файлы, включая строки комментариев, на всех версиях Windows они будут использоваться для
Труба
REM
для блокировки Стандартный ввод Действительно полезный трюк — использовать REM
в сочетании с трубопроводом, как в:
REM | ВЫБОР / C: AB / T: A, 5> NUL
Команда CHOICE сама по себе истекает через 5 секунд (/ T), за исключением случаев, когда кто-то нажимает клавишу, не указанную в / C, и в этом случае обратный отсчет будет прерван.
Используя REM
и соединяя его (всегда пустой) стандартный вывод со стандартным вводом CHOICE, этот стандартный ввод больше не будет получать нажатия клавиш с консоли (клавиатуры).
Таким образом, нажатие кнопки не ускоряет CHOICE
и не останавливает его.
(Я позаимствовал эту технику у «Outsider», одного из «постоянных клиентов» группы новостей alt.msdos.batch, и добавил параметр / C, чтобы сделать его независимым от языка)
Примечание: | Этот трюк будет работать в КОМАНДЕ.Только COM, а не в CMD.EXE. В CMD.EXE все после «команды» REM считается комментарием, включая символ вертикальной черты. Для CMD.EXE можно использовать следующую команду (Windows XP и новее): Прочтите мою страницу ожидания, чтобы узнать, как установить задержки в Windows NT 4 и более поздних версиях. |
Несколько языков позволяют закомментировать полные блоки кода с помощью «тегов» / *
и * /
.
Rexx, например, будет рассматривать весь текст, помеченный красным, как комментарий:
Скажите: «Эта строка - настоящий код» / * Но это комментарий. И эта линия тоже. И этот... * /
Пакетный язык не имеет блоков комментариев, хотя есть способы добиться эффекта:
@ECHO ВЫКЛ. REM Сделайте что-нибудь • • REM Конец кода REM Начало блока комментариев 1 GOTO EndComment1 Эта строка является комментарием.И эта линия тоже. И этот... : EndComment1
Или, если блок комментариев появляется в конце командного файла:
@ECHO ВЫКЛ. REM Сделайте что-нибудь • • REM Конец кода; используйте GOTO: EOF вместо EXIT для Windows NT и более поздних версий ВЫХОД Начало блока комментариев в конце командного файла Эта строка является комментарием. И эта линия тоже. А этот ...
@ECHO ВЫКЛ. REM Сделайте что-нибудь • • REM Конец кода (Начало блока комментариев в конце командного файла Эта строка является комментарием.И эта линия тоже. И этот... Только убедитесь, что вы никогда не используете закрывающую скобку.
Примечание: | У этого приема есть один серьезный недостаток: использование круглых скобок в блоке комментариев не допускается. |
Тайна разгадана
Недавно Васко Рато показал мне решение загадочно исчезающего кода.
Если вы прочитаете уловку Лео Гутьерреса Рамиреса с отсутствующей закрывающей круглой скобкой, вы увидите, что именно это и происходит.
Следующая строка кода:
(комментарий REM2 и комментарий ECHO2)
эквивалентно
(REM независимо от
, поскольку все, что следует за оператором REM
, включая закрывающую скобку, является комментарием, т.е. не интерпретируется !
Поскольку в «блоке загадочного кода» после этого комментария не было других круглых скобок, все от открывающей скобки до и оператора REM
до конца кода является блоком комментариев «в стиле Лео Гутьерреса Рамиреса».