Привет, друзья.
Кому посчастливилось родиться в 80-ых годах (или раньше) и сравнительно рано заиметь компьютер, прекрасно знают про DOS. Пусть в нём и были удобные файл-менеджеры, вроде Norton Commander, или горячо мною любимый DOS Navigator (пиратский, конечно), консолью пользоваться приходилось. Кто не знает, это такой чёрный экран с текстом. Всё управление осуществлялось посредством ввода специальных команд. Сейчас в Windows для всего существуют привычные окошки. Но командную строку выпиливать не стали.
Любители Линукса с консолью тоже знакомы. Остальные могут задаться вопросом: нафига она нужна? Так и есть, не нужна, если возникают подобные вопросы. Пост для тех, кто хочет. Рассмотрим несколько примочек стандартного cmd.exe, вызываемого при запуске bat-файла.
*.bat — пакетный файл, содержит последовательность команд. Выполняется с помощью интерпретатора командной строки — cmd.exe сейчас или command.com во времена DOS.
Кто-то может сказать, что bat-файлы не нужны, если есть консоль. Всё так, но «батнички» создаются для удобства. Допустим, есть группа картинок в какой-то папке, которые надо прогнать через оптимизатор. Если картинки постоянно новые, например, перед публикацией очередной статьи на блоге, удобнее подготовиться один раз, после чего скинуть файлы в папку, запустить bat-файл и загружать готовые картинки.
Рассмотрим группу полезных и не очень команд, которые могут использоваться при работе.
Команда pause
Просто выводит сообщение о необходимости нажать любую клавишу для продолжения и ожидает нажатие клавиши. Команда очень полезна, когда требуется что-то выполнить и не закрывать консоль после этого. Иначе говоря, можно видеть результат работы команд.
echo Hello! pause
Команда @echo off
Многие батники начинаются с этой строки. Проиллюстрировать, что делает программа, проще всего на таком батнике:
@echo off echo Hello pause
Если первой строки нет, будет тот вариант, что слева. При наличии этой строки — вариант справа. Получается, @echo off препятствует выводу исполняемой команды. Результаты работы в консоли отображаются.
Команда cls
Всё, что делается — очищается консоль.
echo Hello! pause
Разделитель команд
Для выполнения сразу нескольких команд можно использовать & — символ амперсанда.
color 2 & cls & pause
Меняет цвет шрифта на зелёный, очищает экран и выводит надпись о необходимости нажатия клавиши для продолжения работы.
Переключить диск на другой
Просто пишем букву диска и ставим двоеточие:
d:
Текущий диск меняется на D.
Вывод текущего каталога, смена каталога
Команда cd без параметров выводит полный путь к тому месту, где мы находимся. Для смены нужно добавить параметр с путём:
cd c:\windows
Меняет путь на системную директорию Windows. Важно! Команда работает только в путями диска, на котором находимся в данный момент. Если нужно использовать файл с другого диска, для начала переключитесь на него (см. предыдущую команду).
Вывод в файл
Есть и такая возможность. Используйте символ > с указанием имени файла, в который надо скопировать результат работы команды.
dir > 1.txt
В файл 1.txt будет записан листинг (вывод) команды dir, которая выводит список всех папок и файлов в текущем каталоге.
Установка переменных
Для этого нужно использовать команду set, а в качестве параметра указать имя переменной и сразу, без пробелов, знак равно и значение. Для доступа к установленной переменной в программе используется её имя, обрамлённое знаками процента. Пример:
@echo off set a=Hello, World! echo %a% pause
Как назначить переменной текущий путь
Путь к текущему каталогу содержится в особой переменной %~dp0.
@echo off set current_path=%~dp0 echo %current_path% pause
SetLocal и параметры
В начало bat-файла обычно добавляются параметры для изменения значения переменных среды выполнения.
- EnableExtensions — включение расширенной обработки команд. В частности, нужно для обработки флага /r.
- EnableDelayedExpansion — для корректного изменения переменных. Установленные переменные далее, в циклах, не меняются. Этот флаг позволяет изменить поведение, но для доступа к переменным нужно использовать не знаки процента %var%, а восклицательные знаки !var!.
SetLocal EnableExtensions EnableDelayedExpansion
Получение определённых файлов из каталога и его подкаталогов
Выше упоминалась команда dir, которая выводила содержимое текущего каталога. Она может принимать в качестве пути маску для поиска, но действует, опять же, только в целевой директории. Для рекурсивного поиска существует команда for с флагом /R.
for /R . %%a IN (*.png) DO echo %%a
Команда ищет не только в указанном месте (в данном случае — символ точки — текущая директория), а так же во всех вложенных поддиректориях, файлы с расширением *.png, после чего выводит их на экран. Обратите внимание на синтаксис, знаки процента указывают перед переменной.
Замена части строки на другую
Очень интересный синтаксис. В момент использования переменной, нужно сразу после её имени поставить двоеточие, указать ЧтоМеняем, знак равно и НаЧтоМеняем. Чтобы было ясно, пусть определена переменная a. Тогда, для замены юзается такая конструкция %a:ЧтоМеняем=НаЧтоМеняем%. Пример:
@echo off set a=Hello, world echo %a:Hello=Aloha% pause
Выведет на экран надпись Aloha, world.
Вывод путей файлов относительно текущего каталога
Для этого потребуются фишки, используемые выше.
@echo off SetLocal EnableExtensions EnableDelayedExpansion for /R . %%a IN (*.png) DO ( set fn=%%a echo !fn:%~dp0=! ) pause
Вторая строка здесь обязательна. Без установки флага EnableDelayedExpansion переменная fn не раскроется. При отсутствии EnableExtensions работать будет, но это не точно — некоторые пользователи могут переопределить соответствующую настройку в реестре, и программа будет ругаться на флаг /R. Поэтому просто указываем оба параметра, на случай юзеров с непредвиденным поведением рук.
Пожалуй, на сегодня достаточно. Для более детальной справки по указанным программа пользуйте стандартный параметр /? например так:
for /?
В следующий раз, основываясь на полученном сегодня опыте, сделаем какую-нибудь годноту. Если нашли для себя что-то полезное, не поленитесь жмакнуть кнопочку ниже ↓ и рассказать друзьям. Может, они тоже найдут для себя что-то.
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
Приветствую, Андрей. Меня всегда это черное окошечко пугало! Да и синее тоже…
Что сделаешь… Юзер, он и в Африке — юзер (только, там черный).
Вот и сейчас, пытаюсь прочитать статью, а кажется, что меня на фиг посылают
Хотя, есть и хорошее. Не прошло и 30 лет, как я наконец узнал, что это черное окошечко называется консолью и его назначение вовсе не для того, чтобы при виде его сразу бежать к спецу и кричать, что у меня комп сломался.
Юрий, доброй пятницы!
Не появись виндузы, и компьютеры сейчас не стояли в (почти) каждом доме. Удобнее один раз разобраться в интерфейсе, нежели каждый раз изучать возможности новой консольной программы с помощью встроенной справки, весьма краткой, надо сказать.
Понимаю, что статья полезная, пользовался несколько раз консолью. Заметку на корочке сделал, спасибо
Дима, приветствую!
Если пригодится — замечательно. Нет — ещё лучше, это будет означать, что визуальный интерфейс ОС довели до ума и совершенства)
Андрюшечек приветствую! (по аналогии с твоему комменту)
Пользуюсь панелью, особенно когда проблемы со связью, когда проблемы с хостингом или не пускает по IP и такое бывает. Спасибо за классный обзор!
Еленчик, доброго дня!
Каждый раз узнаю о тебе что-то новое) Может, ты и на Питоне программируешь?
Доброго здоровья, Анди-сан!
Мне всегда думалось, что консолью только программисты и пользуются. И то не часто.
Сама я, ей Богу, в жизни от силы пару раз пользовалась этой самой строкой на компе (в силу какой-то прямо невывозможной необходимости ). Но буквально летом деточка у меня на славабогустаром (то есть том, которым я сама уже не пользуюсь) смарте сначала установил пароль для снятия блокировки экрана, а потом благополучно его «забыл» и телефон невозможно было разблокировать. Так вот, пришлось изрядно гуглить и потом потеть, чтобы вызвать эту самую командную строку, чтобы вернуть смарт к заводским настройкам, при этом, конечно, потеряв все данные, тою же самой милой деточкой до этого нафотаные, навидюшенные и наговорюшенные.
Так что, без строки, конечно, иногда не обойтись. Это я теперь точно знаю.
Светик, приветик)
Ну что ты, это миф. Прогам консоль вообще не нужна, у них сейчас полноценная IDE, всё делают не выходя оттуда.
А вот админам до сих пор консоль должна быть близка, как любимая женщина
Анди, приветы! От ностальгических словосочетаний Norton Commander — я плакаль. 1990 год … Несбыточная мечта иметь свой компьютер, который стоит тогда столько, что можно копить всю жизнь
Затем, первая 286-я модернизированная в 386-ю путем замены материнской платы и запаиванием проводов блока питания прямо на плату…
Но некоторых вещей тогда еще не было, например: EnableDelayedExpansion — такого флага я не помню, может он уже в Винде родился
Денис, доброго дня!
Эх, вот времена были. Покупка первого компьютера была таким же радостным событием, как видеомагнитофон. Для кого-то меньше, для кого-то больше, но это нормально.
У меня первый комп появился только в 97. Хотя ещё со школы хотелось, но «Спектрум» на телике не запустился(
Флаг и правда новый. Да и тогдашняя командная строка была гораздо беднее. В command.com можно запихнуть не более 65535 байт (возможно, в ранних версиях DOS было меньше). И это должно было обеспечивать шуструю работу и достаточную функциональность для работы всей системы.