Четверг , 12 Декабрь 2024
ДомойПубликацииКонсоль в Windows или немного о BAT и командной строке

Консоль в Windows или немного о BAT и командной строке

Привет, друзья.

Кому посчастливилось родиться в 80-ых годах (или раньше) и сравнительно рано заиметь компьютер, прекрасно знают про DOS. Пусть в нём и были удобные файл-менеджеры, вроде Norton Commander, или горячо мною любимый DOS Navigator (пиратский, конечно), консолью пользоваться приходилось. Кто не знает, это такой чёрный экран с текстом. Всё управление осуществлялось посредством ввода специальных команд. Сейчас в Windows для всего существуют привычные окошки. Но командную строку выпиливать не стали.

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|on

Если первой строки нет, будет тот вариант, что слева. При наличии этой строки — вариант справа. Получается, @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-файла обычно добавляются параметры для изменения значения переменных среды выполнения.

  1. EnableExtensions — включение расширенной обработки команд. В частности, нужно для обработки флага /r.
  2. 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

Автор публикации

2 070
не в сети 4 месяца

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (2 голосов, в среднем: 5,00 из 5)
Загрузка...

10 комментариев

  1. Приветствую, Андрей. Меня всегда это черное окошечко пугало! Да и синее тоже… smile
    Что сделаешь… Юзер, он и в Африке — юзер (только, там черный).
    Вот и сейчас, пытаюсь прочитать статью, а кажется, что меня на фиг посылают smile
    Хотя, есть и хорошее. Не прошло и 30 лет, как я наконец узнал, что это черное окошечко называется консолью и его назначение вовсе не для того, чтобы при виде его сразу бежать к спецу и кричать, что у меня комп сломался.

    Рейтинг: 2
    • Юрий, доброй пятницы!
      Не появись виндузы, и компьютеры сейчас не стояли в (почти) каждом доме. Удобнее один раз разобраться в интерфейсе, нежели каждый раз изучать возможности новой консольной программы с помощью встроенной справки, весьма краткой, надо сказать.

      Рейтинг: 1
  2. Понимаю, что статья полезная, пользовался несколько раз консолью. Заметку на корочке сделал, спасибо smile

    Рейтинг: 2
  3. Андрюшечек приветствую! (по аналогии с твоему комменту) smile smile
    Пользуюсь панелью, особенно когда проблемы со связью, когда проблемы с хостингом или не пускает по IP и такое бывает. Спасибо за классный обзор!

    Рейтинг: 2
  4. Доброго здоровья, Анди-сан! smile
    Мне всегда думалось, что консолью только программисты и пользуются. И то не часто.
    Сама я, ей Богу, в жизни от силы пару раз пользовалась этой самой строкой на компе (в силу какой-то прямо невывозможной необходимости crazy ). Но буквально летом деточка у меня на славабогустаром (то есть том, которым я сама уже не пользуюсь) смарте сначала установил пароль для снятия блокировки экрана, а потом благополучно его «забыл» и телефон невозможно было разблокировать. Так вот, пришлось изрядно гуглить и потом потеть, чтобы вызвать эту самую командную строку, чтобы вернуть смарт к заводским настройкам, при этом, конечно, потеряв все данные, тою же самой милой деточкой до этого нафотаные, навидюшенные и наговорюшенные. crazy rofl
    Так что, без строки, конечно, иногда не обойтись. Это я теперь точно знаю. smile

    Рейтинг: 2
    • Светик, приветик)
      Ну что ты, это миф. Прогам консоль вообще не нужна, у них сейчас полноценная IDE, всё делают не выходя оттуда.
      А вот админам до сих пор консоль должна быть близка, как любимая женщина crazy

      Рейтинг: 1
  5. Анди, приветы! От ностальгических словосочетаний Norton Commander — я плакаль. 1990 год … Несбыточная мечта иметь свой компьютер, который стоит тогда столько, что можно копить всю жизнь smile

    Затем, первая 286-я модернизированная в 386-ю путем замены материнской платы и запаиванием проводов блока питания прямо на плату…

    Но некоторых вещей тогда еще не было, например: EnableDelayedExpansion — такого флага я не помню, может он уже в Винде родился smile

    Рейтинг: 1
    • Денис, доброго дня!
      Эх, вот времена были. Покупка первого компьютера была таким же радостным событием, как видеомагнитофон. Для кого-то меньше, для кого-то больше, но это нормально.
      У меня первый комп появился только в 97. Хотя ещё со школы хотелось, но «Спектрум» на телике не запустился(
      Флаг и правда новый. Да и тогдашняя командная строка была гораздо беднее. В command.com можно запихнуть не более 65535 байт (возможно, в ранних версиях DOS было меньше). И это должно было обеспечивать шуструю работу и достаточную функциональность для работы всей системы.

      Рейтинг: 1

Оставить комментарий

Политика конфиденциальности

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

Принять