Команда ECHO — вывод текста на экран консоли
Команда ECHO наверно является одной из самых простых и самых используемых команд. Применяется для вывода текстовых сообщений на стандартный вывод и для переключения режима отображения команд на экране.
Формат командной строки:
ECHO [ON | OFF] — включить / выключить режим отображения вводимых команд на экране.
ECHO [сообщение] отобразить текст сообщения на экране.
ECHO — при вводе команды без параметров, отображается текущий режим отображения команд:
Режим вывода команд на экран (ECHO) включен.
Для вывода пустой строки, используется команда ECHO с точкой:
echo Hello World. — вывод сообщения Hello World. на экран.
echo %USERNAME% — вывод на экран значения переменной окружения USERNAME (имени текущего пользователя)
Наиболее распространено использование команды echo в командных файлах. Практически любой командный файл начинается командой
@echo off — отключить режим вывода команд на экран. Символ @ перед командой echo используется для того, чтобы на экран не выводился и текст самой команды.
Очень часто команда echo используется для записи сообщений в текстовый файл с использованием перенаправлением вывода:
echo Начало работы — %DATE% в %TIME% >logfile.txt
Echo ERORLEVEL=%ERRORLEVEL% >> logfile.txt
Echo Конец работы, %DATE% в %TIME% >>logfile.txt
В текстовый файл logfile.txt записывается дата и время начала работы командного файла, некоторые результаты и время завершения.
Нередко, команда echo используется для создания нового файла:
echo 1 >newfile.cmd — вывести символ «1» в файл newfile.cmd . Если такого файла не существует, он будет создан, если существует, то будет перезаписан.
Значения параметров командной строки, переменных и их подстановочных значений, также нередко отображаются с помощью команды echo . Пример командного файла, выводящего на экран информацию о себе:
@echo off
ECHO ОБРАБАТЫВАЕТСЯ ФАЙЛ — %0
ECHO Дата/время создания/изменения командного файла — %
t0
ECHO Путь командного файла — «%
f0″
ECHO Диск командного файла — %
d0
ECHO Каталог командного файла — «%
p0″
ECHO Имя командного файла — %
n0
ECHO Расширение командного файла — %
x0
ECHO Короткое имя и расширение — %
s0
ECHO Атрибуты командного файла — %
a0
ECHO Размер командного файла — %
При выводе служебных символов, интерпретируемых командным процессором нужно использовать символ ^ . Например, вместо значения переменной ERRORLEVEL, нужно вывести текст “%ERRORLEVEL%”
ECHO ^%ERRORLEVEL^% = %ERRORLEVEL%
Особенностью команды ECHO является добавление служебных символов возврата каретки и перевода строки 0x0D и 0x0A (Carriage Return и Line Feed) в конец выводимого текста. Командный файл следующего содержания выводит текст из 3-х строк:
Если же требуется вывести весь текст в одну строку, обычно используют эмуляцию команды ECHO командой SET с параметром /P, используемой для организации диалога с пользователем, когда выводится сообщение, на которое требуется ответ. Выводимое сообщение можно использовать таким же образом, как и в команде ECHO, а вместо ответа можно использовать ввод с фиктивного устройства nul :
При выполнении такого командного файла сообщение на экране будет представлено одной строкой:
Для подачи звуковых сигналов можно использовать вывод служебного символа с кодом 07 (BELL). Достаточно просто включить его в поток выходных данных, что зависит от возможностей редактора, который используется для написания командного файла. Можно использовать и стандартные возможности командной строки, добавив комбинацию CTRL+G :
Windows bat set echo off
Вывод на экран сообщения или задание режима вывода на экран сообщений команд. Вызванная без параметров команда echo выводит текущий режим.
Синтаксис
Параметры
Примечания
- Команда echoсообщение может оказаться полезной, если отключен режим отображения работы команд. Для вывода сообщений из нескольких строк без вывода дополнительных команд между ними следует использовать несколько последовательных команд echoсообщение после команды echooff в пакетной программе.
- Если используется команда echooff, приглашение командной строки не отображается на экране. Чтобы отобразить приглашение, введите команду echoon.
- Чтобы отключить вывод строк, введите символ «коммерческого эт» (@) перед командой в пакетном файле.
- Чтобы вывести на экране пустую строку, введите следующую команду:
Чтобы вывести символы канала (|) или перенаправления ( ) при использовании команды echo, введите символ (^) непосредственно перед символом канала или перенаправления (например ^>, ^ NUL set x=Русский текст chcp 866 >NUL echo %x% pause
Такие сообщения для удобства можно выделить в отдельный блок.
Если такой блок неудобно располагать в начале файла, то можно образовать из него процедуру, разместить в конце bat файла, а на исполнение вызвать эту процедуру командой call в начале bat файла. Из примера все должно стать понятнее))
Если сообщение одиночное, то можно извратиться поступить следующим образом:
Таким образом можно выводить русские буквы (текст) в команде echo.
Эти же замечания по поводу вывода русского текста относятся и к команде Title и Set с параметром P.
Для вопросов, обсуждений, замечаний, предложений и т. п. можете использовать раздел форума этого сайта (требуется регистрация).
Урок 1 по CMD — утилита echo
Команда echo в командной строке используется для вывода данных на экран консоли или же в файл, и для включения/выключения эхо-отображения команд.
Эхо-отображения – вывод на экран самих команд, а не только результат их выполнения. Так, если мы пропишем в сценарии следующую строку кода:
а потом запустим его через консоль командной строки, то вначале нам выведет сами команды (echo Hello World & dir), а уже потом результат их выполнения. В данном случае команда cmd – echo, выводит строку Hello World, а команда dir (смотрите статью «Утилита DIR») – содержимое текущего каталога, символ & отвечает за конкатенацию (объединение) обеих команд (смотрите статью «Урок 2 по CMD — операторы командной строки»).
Для простоты запуска сценариев, пропишите в командной строке:
Вместо пропишите путь к каталогу, в котором собираетесь хранить сценарий. Дайте сценарию простое имя, например, test.bat. Теперь в переменных окружения будет прописан путь к тестируемому сценарию, и вам не придется лишний раз делать переходы по папкам.
Hello World – да, да, зачем ломать традиции. Наверно, автор каждой книги по программированию начинает свои примеры с это фразы… Можно даже составить целую подборку в стиле “Привет Мир на тысячи языках программирования”. Как не странно, но по этому запросу в выдаче Яндекса и правда большая часть сайтов посвященных программированию!
Для управления эхо-отображениями после echo в командной строке нужно прописать off (выключить эхо) или on (включить эхо). Теперь давайте перепишем предыдущий пример:
Хорошо, теперь последняя строка уже не отображается, но отображается первая, что не является показателем достигнутой цели, как это исправить, я покажу дальше, по ходу статьи.
Как уже упоминалось, утилита командной строи (cmd) echo позволяет выводить данные в файл, для это после нее нужно прописать оператор > (выводит данные в файл и полностью переписывает его содержимое) или >> (выводит данные в файл, и если он не пустой, дописывает данные в конец) и путь к файлу, или просто имя файла:
В данном случае, если запустить сценарий с этим кодом из консоли командной строки (cmd), то в самом окне cmd отобразится первая строка кода, а в файл hello.txt запишется строка Hello World.
Однако, можно включить или выключить вывод эхо-команд на экран в самом окне командной строки, а не только через сценарий. Для начала просто введите команду cmd echo в командной строке и нажмите ENTER, вам выведет сообщение о том, включен режим эхо или нет. Что бы отключить или включить режим эхо-вывода, используйте аналогичные команды с предыдущий примеров: on и off. Так, если вы выполните эхо off, то не будет отображаться даже путь к текущему каталогу, а если выполните команду cls (очистка экрана), то окажетесь перед черным экраном с мигающим курсором и только неизвестность из темноты будет всматриваться в ваши глаза
Для справки: что бы вывести на экран консоли пустую строку, нужно ввести команду эхо и сразу после нее прописать точку: “echo.”, межу командой и точкой не должно быть пробела.
Хорошо, теперь давайте рассмотрим cmd команду @, которая довольно часто используется на ровне с ЭХО. Данная команда предотвращает отображение эхо-команд для отдельной строки, то есть, команда @ фактически является аналогом echo off, только не для всего кода, а лишь для отельной строчки, в которой она собственно и фигурирует.
Давайте перепишем предыдущий пример:
Бинго, теперь после запуска сценария в окне командной строки cmd echo off не будет отображаться.
Или можно так прописать:
В данном случае мы не использовали команду echo off, зато прописали оператор cmd @ для каждой строки.
Можно даже попробовать в окне командной оболочки ввести @echo off на выполнение, в таком случае пропадет и приглашение командной строки.
По теме данной статьи можно провести аналогию с сервером сценариев Windows Script Host, в котором объект WScript.Shell использует аналогичную команду эхо для вывода данных. Так же, если мне память не изменять, функция эхо применяется в языке программирования php. Тот, кто пробовал свои силы в различных языках программирования с легкостью сможет провести между ними аналоги и найти общие точки.
Спасибо за внимание. Автор блога Владимир Баталий
Windows bat set echo off
В статье рассматриваются примеры практического использования в bat-файлах команд for, echo, goto, определения функций, экранирования символов, определения каталога запуска и многое другое.
Мы все любим писать серьезные вещи на серьезных языках. Шаблоны, C++, Reflection, Perl и многое другое – вот то, что мы любим, то, чему посвящаем длинные сообщения в форумах, то, что снится нам по ночам.
Однако в нашей повседневной деятельности встречаются и вещи, которые не так интересны и интеллектуальны. Мы не очень любим говорить об этом, делаем вид, что Это – грязно, нечистоплотно и недостойно нашего внимания. Однако, приходит день, приходит час и перст Судьбы находит нас – нам надо написать еще один батничек… Иногда это запускалка для построения проекта, которая должна при ошибке компиляции скопировать логи на сетевой диск, иногда – запуск обновления исходных текстов из SVN. Иногда – что-нибудь еще.
К чему я это все? А к тому, что поговорим мы о полезных хитростях при написании файлов сценариев на встроенном командном языке Windows. К счастью, это занятие не является доминирующим в профессиональной деятельности автора, так что я не обязуюсь заполнить абсолютно все пробелы в данной области. Кроме того, рожденный ползать летать не может, и из cmd.exe, увы, не получится ни /usr/bin/perl, ни даже /bin/sh. Так что, все нижеприведенное – просто некоторые интересные факты из жизни файлов с расширением bat, на которые автор обратил внимание во время решения различных практических задач автоматизации.
Наш урок будет построен по сугубо практическому принципу, известному в народе как Cookbook. Иными словами, я не буду вдаваться в синтаксические и семантические дебри командного языка Windows, а лишь продемонстрирую его возможности (хотел написать «мощь», но все-таки передумал). Именно поэтому большинство следующих заголовков будет начинаться со слова «Как». Впрочем, для полноты по ходу развития событий будут даваться подробные комментарии, в том числе и по языковым конструкциям.
ПРЕДУПРЕЖДЕНИЕ Практически все описанные здесь рецепты подойдут только для Windows 2000 и старше. Bat-язык Windows 9x, к счастью, можно считать почившим, так что здесь он не рассматривается. Более того, диалекты cmd.exe операционных систем Windows 2000, Windows XP и Windows Server 2003 также немного различаются. Все приведенное ниже создано и проверено на компьютере под управлением операционной системы Windows XP. За подробной информацией по различиям в реализации той или иной команды обращайтесь к [1]. Как экранировать символ? В командном языке Windows существует некоторый набор символов с высоким приоритетом, которые всегда трактуются как спецсимволы. К ним, в частности, относятся:
В случае если символ, относящийся к одному из таких операторов, должен быть включен в вашу команду в его литеральном смысле, вас ждут определенные неожиданности. Например, при выполнении вот такой строки символ процента будет «съеден» интерпретатором, который решит, что это попытка вывода значения какой-то переменной. В случае со знаком процента решение довольно хорошо известно и состоит в удвоении этого символа: после чего все заработает так, как надо. Однако в других случаях все менее очевидно. Рассмотрим командный сценарий, который генерирует незатейливый HTML-файл: К сожалению, при попытке запуска этого «чуда инженерного разума» нас постигнет неудача в виде сообщения об ошибке «was unexpected at this time». Оно и понятно: командный интерпретатор не в силах разобраться, где его просят вывести на экран символ HTML-тега, а где перенаправить вывод. В нормальных языках программирования эта проблема обычно решается обрамлением строковых литералов кавычками. Отчасти это помогает и в bat-файлах. Но лишь отчасти. Выполнение строки приведет к тому, что в выходной файл будут записаны и сами кавычки. Это явно не совсем то, что требуется. К счастью, есть один малоизвестный способ, позволяющий добиться требуемого результата. Символ ^ позволяет экранировать любой другой символ с безусловным приоритетом. Таким образом, вышеприведенный пример генерации HTML может быть успешно записан так: Таким же способом можно экранировать любой другой специальный символ. Очевидно, можно экранировать и сам ^. Не очень эстетично, зато дешево и практично. Слово «надежно» я пропустил умышленно… Как перенести длинную строку? Совет по поводу экранирующего символа ^ имеет еще одно применение: перенос строк. Я (как и многие из вас, наверное) люблю, чтобы любой исходный текст, который я пишу, выглядел красиво – даже *.bat-файлы. Одним из обязательных условий красоты и удобочитаемости кода для меня является его ширина: все строки должны умещаться в 78 столбцов. Можно поспорить по поводу числа 78, но в одном я непреклонен – ограничение на ширину текста кода должно быть, иначе это не код, а макароны. Так вот долгое время *.bat-файлы портили мне жизнь тем, что иногда приходилось писать длинную строку – например, вызов какой-нибудь другой программы с кучей опций, и я не знал, что с этим делать. Происходило это нечасто, но всегда было неприятно. Но, к счастью, моя жизнь изменилась с тех пор, как я открыл для себя Супер-Символ ^: Помните лишь, что чудо-символ должен быть последним в строке – скажите «Нет!» концевым пробелам. Как определить имя каталога, в котором находится запущенный командный файл? Иногда сценарию надо знать полный путь к себе самому и/или к каталогу, в котором он находится. Это может понадобиться по разным причинам. Например, он должен достать из системы контроля версий исходники в каталог/src рядом с собой. Или, запускаются тесты из каталога/tests, и перед их запуском надо добавить каталог/bin в переменную PATH. Можно, конечно, рассчитывать на то, что командный файл был вызван из того же каталога, где он находится, и тогда в качестве вышеупомянутогоможно использовать переменную окружения %CD% — полный путь к текущему каталогу. Однако любые допущения в нашем деле недопустимы (хороший каламбур, однако!). Поэтому приведу более надежное решение. Прежде всего, вспоминаем, что переменная %0 в bat-файле соответствует нулевому аргументу командной строки, т.е. имени самого файла. После этого читаем скудную документацию для команды call: и обнаруживаем, что при использовании нумерованных переменных %0-%9 можно использовать некоторые модификаторы: 1 — разворачивает %1, удаляя кавычки («) f1 — разворачивает %1 в полный квалифицированный путь d1 — разворачивает %1 в букву диска p1 — разворачивает %1 в путь n1 — разворачивает %1 в имя файла x1 — разворачивает %1 в расширение файла s1 — развернутый путь будет содержать только короткие имена a1 — разворачивает %1 в атрибуты файла t1 — разворачивает %1 в дату/время создания файла z1 — разворачивает %1 в размер файла $PATH:1 — Ищет в каталогах, перечисленных в переменной среды PATH, и разворачивает %1 в полное квалифицированное имя первого совпадения. Если имя переменной среды не определено, или если файл не найден, этот модификатор вернет пустую строку и, более того, модификаторы можно объединять для получения сложных результатов: Таким образом, правильным будет использовать в качестве тега сочетание % dp0, которое будет раскрыто в полный путь к каталогу, где находится сценарий. Например, Обратите внимание на использование кавычек – потенциально каталог может иметь в своем пути пробел. Кавычки избавят от проблем в этом случае.
|