#статьи
-
0
Автоматизируем рутину в Windows с помощью скриптов.
Иллюстрация: Оля Ежак для Skillbox Media
Филолог и технарь, пишет об IT так, что поймут даже новички. Коммерческий редактор, автор технических статей для vc.ru и «Хабра».
На Windows часто возникают рутинные задачи, которые хочется автоматизировать. Например, почистить временные файлы, забэкапить важные документы или запустить одним кликом несколько приложений. Для этого есть простой инструмент — BAT-файлы (в простонародье «батники»). В этой статье научимся разрабатывать простые скрипты и запускать их по расписанию.
Эксперт
CTO Flocktory, программный директор профессии «DevOps-инженер» в Skillbox, директор программного комитета DevOpsConf.
Содержание
- Как создать BAT-файл
- Команды и синтаксис
- Как объявить переменную
- Как комментировать строки
- Примеры BAT-файлов
- Как запустить BAT-файл через командную строку
BAT-файлы — это скрипты с набором команд, которые понимает командная строка Windows. Их можно использовать для автоматизации задач, которые часто повторяются или занимают у пользователя много времени. Такие скрипты хранятся в файлах с расширением .bat.
Для создания BAT-файла понадобится любой текстовый редактор, например стандартный «Блокнот». Давайте откроем его и напишем скрипт, который выведет в окне командной строки сообщение Hello, World!:
@echo off echo Hello, World! pause
Теперь нужно сохранить документ в формате .bat. Для этого выберем пункт Сохранить как в разделе меню Файл.
В появившемся окне можно ввести любое название файла, а конце надо обязательно добавить расширение .bat. Затем нажимаем Сохранить:
Если запустить получившийся файл, откроется командная строка с нашим сообщением:
Для разработки батников существует множество команд. Рассмотрим те, что встречаются чаще всего.
Команда | Аргумент команды | Действие |
---|---|---|
title | Желаемый заголовок | Устанавливает заголовок окна командной строки на желаемый |
cd | Путь к каталогу | Переводит пользователя в каталог, указанный в пути к файлу |
start | Команда или путь к файлу | Запускает указанный файл программы или выполнение команды в новом окне командной строки |
mkdir или md | Имя папки | Создаёт папку с указанным именем |
copy | Имена файлов и путь к папке для копирования | Копирует файлы в указанный каталог |
xcopy | Имена файлов и путь к папке для копирования | Копирует каталоги и файлы, сохраняя их структуру |
move | Путь к файлу и к конечному каталогу | Перемещает файлы из одной папки в другую |
del | Путь к папке | Удаляет файлы внутри каталога. Не трогает папки |
rd | Путь к папке | Удаляет папку |
start | Путь к файлу программы | Запускает файл программы |
color | Обозначение цвета | Меняет цвет фона и текста командной строки |
echo | Текст | Выводит текст на экран командной строки |
chcp | Обозначение кодировки | Указывает кодировку текста. Пригодится для корректного отображения кириллицы |
pause | — | По окончании выполнения команд оставляет окно командной строки запущенным |
exit | — | Завершает работу командной строки |
Переменная — виртуальная ячейка с присвоенным именем, в которой хранятся данные. Это может быть текст, числа или выражения. К переменной можно обращаться по имени, чтобы использовать её содержимое или перезаписывать его.
В BAT-файлах переменная объявляется с помощью команды set. После команды надо указать уникальное имя переменной и присвоить ей значение:
@echo off set example=Hi,user! echo %example% pause
Разберём строки скрипта:
- @echo off — эта строка отключает отображение команд. Будут показаны только строки, которые начинаются с echo.
- set example=Hi, user! — создаёт переменную с именем primer и записывает в неё строку Hi, user!.
- echo %example% — выводит содержимое переменной на экран.
- pause — эта команда не даёт окну закрыться сразу после выполнения скрипта, чтобы мы могли оценить результат.
Если запустить этот BAT-файл, то в командной строке появится содержимое переменной example:
Для записи в переменную значения выражения надо использовать флаг /a перед именем:
set /a example=5*10
В BAT-файлах бывает очень много строк кода. Настолько много, что в них можно заблудиться, а со временем забыть логику всего скрипта. В таких случаях лучше использовать комментарии, объясняющие код. Они не отображаются при запуске и не влияют на выполнение команд.
Для создания однострочных комментариев используют команду rem или двойное двоеточие (::):
rem текст_комментария :: текст_комментария
Например, следующий скрипт не выведет на экран строку Следующие команды выводят текст на экран:
@echo off rem Следующие команды выводят текст на экран set primer=Hi, user! echo %primer% pause
Для больших комментариев на несколько строк можно использовать команду goto:
goto comment === текст_комментария === :comment
Обратите внимание, что после goto следует название метки — comment, она же и закрывает комментарий в конце. На самом деле можно использовать любое название метки, главное — чтобы оно было уникальным.
Разберём примеры готовых BAT-файлов для разных задач. Их можно скопировать и использовать уже сейчас.
Допустим, необходимо время от времени создавать копию всех текстовых файлов, лежащих в каталоге Документы. Чтобы не делать это каждый раз вручную, можно создать скрипт и запускать его с рабочего стола.
Батники лучше начинать с команды @echo off, чтобы избавиться от служебных строк, которые информируют о ходе выполнении скрипта. Убрав их, мы ничего не потеряем. Если нужно будет выводить текст, написанный кириллицей, то второй строчкой BAT-файла нужно указать кодировку:
chcp 65001
При каждом запуске скрипта в папке backup на диске C: будем создавать директорию с текущей датой в названии — так будет проще искать бэкапы. Для этого используем команду md с параметром %DATE%:
md "C:/backup/%DATE%"
Теперь скопируем содержимое папки «Документ» в созданную директорию. С помощью параметра %USERNAME% можно обратиться к файлам текущего пользователя, если на компьютере их несколько:
xcopy "C:/Users/%USERNAME%/Documents" "C:/backup/%DATE%"
Для экономии места будем архивировать бэкапы с помощью 7-zip. Нужно будет предварительно скачать и установить программу по инструкции на сайте разработчика.
Далее переходим в каталог с резервными копиями с помощью команды cd и вызываем 7-zip с параметром -tzip. Появится архив бэкапа в формате .zip:
cd "C:/backup/%DATA%" "C:/Program Files/7-Zip/7z.exe" -tzip a %DATE%.zip %DATE%
Ход выполнения скрипта можно сопровождать сообщениями командной строки, чтобы пользователь узнал, когда резервное копирование завершится. Для вывода сообщений используется команда echo.
Кроме того, текст, выводящийся на экран, можно покрасить с помощью команды color, передав ей код цвета. Эту строчку лучше добавлять в начало батника.
Весь список доступных цветов приведён в таблице:
Скриншот: «Командная строка» / Skillbox Media
Скриншот: «Командная строка» / Skillbox Media
Полный текст скрипта для резервного копирования файлов:
@echo off chcp 65001 color 03 echo Начинается процесс резервного копирования md "C:/backup/%DATE%" xcopy "C:/Users/%USERNAME%/Documents" "C:/backup/%DATE%" cd "C:/backup/%DATA%" "C:/Program Files/7-Zip/7z.exe" -tzip a %DATE%.zip %DATE% echo Процесс завершен pause
Бывает, что для работы надо запустить одновременно несколько приложений — например, браузер, мессенджер, редактор кода и клиент Git. Этот процесс можно автоматизировать, чтобы все необходимые программы открывались по одному клику.
Исполняемые файлы запускаются командой start. В качестве аргумента ей надо передать путь к файлу на диске:
start "" "путь_к_исполняемому_файлу"
Так, чтобы открыть одновременно браузер Microsoft Edge, текстовый редактор WordPad и приложение «Службы», надо трижды вызвать команду start:
start "" "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" start "" "C:\Program Files\Windows NT\Accessories\wordpad.exe" start "" "C:\Windows\system32\services.msc"
Перед аргументом всегда добавляйте двойные кавычки («»), иначе откроются не программы, а новые экземпляры командной строки.
В Windows есть папка Temp, в которой система собирает временные файлы из браузера и приложений. Если её не очищать, то со временем её размеры могут увеличиться до десятков гигабайт.
Пользователи редко чистят папку с временными файлами. Для этого надо включить отображение скрытых папок, найти директорию на диске и вручную удалять мусор. Проще автоматизировать эту задачу с помощью простого BAT-файла, который будет очищать папку Temp по клику мыши или расписанию.
Сначала вызовем команду rd с параметрами /s и /q — это полностью удалит папку с диска. Затем создадим Temp заново с помощью mkdir:
rd /s /q C:\Users\%USERNAME%\AppData\Local\Temp\ mkdir C:\Users\%USERNAME%\AppData\Local\Temp\
Запускать BAT-файлы можно разными способами. Самый очевидный — двойной щелчок левой кнопкой мыши. Также можно делать это из командной строки или настроить автоматический запуск по расписанию.
- Откройте окно поиска Windows. Он находится рядом с меню «Пуск».
- Введите в строке поиска cmd и запустите инструмент «Командная строка».
- В окне командной строки укажите полный путь до файла .bat и нажмите Enter.
Батники в Windows открываются в окне командной строки, что иногда может мешать в работе. Простой скрипт на языке VBScript позволяет запускать BAT-файлы в фоновом режиме:
- Откройте любой текстовый редактор, например «Блокнот».
- Вставьте в новый документ код скрипта для скрытого запуска:
Set WshShell = CreateObject("WScript.Shell") WshShell.Run chr(34) & "Полный_путь_до_.bat_файла" & Chr(34), 0 Set WshShell = Nothing
- Сохраните файл, но вместо .bat укажите расширение .vbs.
- Запустите файл, щёлкнув по нему дважды левой кнопкой мыши.
Если у вас есть повторяющиеся задачи, то можно настроить запуск BAT-файлов по расписанию. Для этого понадобится встроенный в Windows «Планировщик заданий».
1. Нажмите сочетание клавиш Win + R, в появившемся окне введите taskschd.msc и нажмите Enter.
2. Откроется «Планировщик заданий». В правой части его окна нажмите Создать простую задачу.
3. В «Мастере создания простой задачи» введите имя новой задачи и её описание. Затем нажмите Далее.
4. Выберите периодичность запуска. Доступны опции с привязкой к конкретному времени или запуску системы.
5. Введите время, в которое нужно запускать задачу.
6. Отметьте пункт Запустить программу.
7. Укажите путь до вашего BAT-файла и нажмите Готово.
Теперь батник будет запускаться с заданной периодичностью. К примеру, так можно настроить автоматическое удаление временных файлов при каждом запуске системы или создание резервной копии раз в неделю.
BAT-файлы — мощный инструмент для автоматизации задач на компьютерах под управлением Windows. Больше о командах можно узнать из официальной документации Microsoft, а на GitHub разработчики публикуют коллекции полезных батников.
Попробуйте себя в IT бесплатно
Вы познакомитесь с основами разработки, напишете первую программу на Python и поймёте, как быстро устроиться в IT.
Учиться бесплатно →
Дисклеймер
Мне 12 и я сам в этой теме плохо шарю, т.к. инфы в инете мало. Пж, без хейта.
Что такое батники и с чем их едят
Пакетный файл или в простонародье батник — это файл, который запускает командную сроку или сокращенно cmd, которая построчно интерпретирует команды, записанные в нем. Подробнее смотрите на https://ru.wikipedia.org/wiki/Пакетный_файл.
Первая программа и основные команды
Чтобы сделать батник, нужно сначала создать текстовый файл с именем test и изменить расширение c .txt на .bat. О том, как можно это сделать, читайте здесь: https://remontka.pro/file-extensions. У вас должен появиться файл с такой иконкой:
Нажимаем на него ПРАВОЙ кнопкой мыши. Должно появиться диалоговое окно. Нажмем «Открыть». Должен открыться блокнот, пишем:
@echo off
echo Hello world!
pause
В 1-ой сроке («@echo off») префикс ‘@ ‘ означает, что команда не будет выведена на экран(попробуйте его убрать ), сама же команда (echo) выводит текст следующий за ней(см. строку 2), НО, если подать строку «off», все последующие команды будут действовать так, как будто перед ними стоит префикс ‘@’, «echo on», соответственно, выключает этот режим. Чтобы вывести символ «%», его нужно дублировать, потом поймете почему :-), для вывода пустой строки поставьте «.» после «echo»
В 3-ей строке команда выводит строку «press any key to continue . . .» (если у вас русский язык — «Для продолжения нажмите любую клавишу . . .») и останавливает программу до нажатия любой клавиши.
Наводим красоту
Команда «rem»
не делает ничего и служит комментарием к коду
rem Это самая лучшая прога в мире!!!!!
Код включает русские символы и другие из ascii(например: «╬▓☼», можно скопировать с http://pascalguru.ru/psevdograf.html), иначе ascii символы превратятся в кракозябры:
chcp 65001
Следующий код код работает, как команда «pause», но ничего не выводит на экран и не реагирует на нажатие клавиш(я потом объясню, как это работает).
:m
goto m
А этот — меняет заголовок окна на «name»
title name
Эта команда меняет цвет фона и текста, вместо a и b можно поставить любые шестнадцатеричные цифры(команда не сработает если a = b) см. таблицу ниже. Запись c одной буквой «а» аналогично записи «0a»
color ab
Эта — досрочно завершает программу
exit
Переменные
Создать переменную можно с помощью команды set, синтаксис объявления следующий: P.S. это не совсем переменные, это скорее макросы (для тех к кто не знает C/C++ это именованный кусочек кода, имя которого заменяется на этот кусочек кода)
set a=Hello world
Если после «set» добавить флаг «/a» то:
-
Переменной задастся значение выражения, а не его текст, например:
set a=2+2 > 2+2 set /a a=2+2 > 4
-
Переменной можно присвоить ТОЛЬКО числовое значение
Чтобы обратиться к переменной, нужно окружить ее символами «%» (так %name%), пример кода:
set /a a=%b%+%b%
echo %a%
Подробнее о переменных
Если добавить флаг «/p», то выводиться значение после символа «=», а переменной задается введенное значение(запустите этот код:)
@echo off
set /p a=Enter str
echo %a%
pause
следующий код вырезает строку от символа номер «a» до символа номер «b» НЕ включительно(счет идет с нуля, отрицательные числа — счет с конца от единицы). Если аргумент один, то он присваивается числу «b», а «a» = 0
%str:~a,b%
следующий заменяет подстроки «a» в строке на строки «b»:
%str:a=b%
Циклы и условия
Цикл можно создать с помощью команды «for», синтаксис следующий:
for %%i in (a b c) do (
cmd
)
или такой
for %%i in (a b c) do cmd
(a b c) это список (не обязательно из 3-х элементов) и переменная %%i (нужно ставить символ после процентов, а не между) по очереди проходит по значениям в списке
Если добавить флаг «/l», то переменная в первый раз будет равна «a». К ней каждый раз будет прибавляться «b», пока она не станет больше «c»(тут размер ДОЛЖЕН равняться 3)
запустите этот код, тут все наглядно
@echo off
chcp 65001
echo Начало
for /l %%i in (1 1 10) do echo %%i
echo Конец
pause
Команда if выполняет код, если условие верно (или если поставить not после if, когда НЕ верно), вот операторы сравнения:
P.S. строки нужно брать в кавычки «%str%»==»Hello»
equ(==) |
= |
neq |
≠ |
lss |
< |
leq |
≤ |
gtr |
> |
geq |
≥ |
пример кода:
@echo off
set /p a=Enter number
if a gtr 0 echo positive else\
if a equ 0 echo 0 else echo negative
pause
в 3-ей строке, если «a» > 0 выводиться «положительный»(на английском ), если равен — 0,в 4-ой если меньше — «отрицательный»
символ «\» означает, что команда продолжается на следующей строке
Метки
Создадите файл start.bat в той же папке, где и test.bat, напишите в нем:
test.bat 2 2
Мы запустили батник, НО подали в него аргументы 2 и 2. Чтобы к ним обратиться, нужно написать %n, где «n» — номер аргумента, считая от одного(не от нуля), вот код, считающий сумму первого и второго аргумента (их может быть от нуля до 9-и):
@echo off
set /a res=%1+%2
echo res
pause
Метка — это именованное место в коде, она создается с помощью команды «:name»
А этот переходит на метку :m и продолжает выполнение, начиная с нее
rem куча кода
:m
rem куча кода
goto m
rem куча кода
И в завершение статьи, хочу сказать о команде call. Она превращает в последующей команде «%%» в «%», а переменные — на их значения. Пример использования:
call echo %%str:~%a%,%b%%%
Как писать скрипты на BATCH? 🤔
Все на самом деле проще, чем кажется. 😉
Вывод текста на экран
@echo off echo It's my the first script on BATCH!
Вывод:
It’s my the first script on BATCH!
С первого взгляда стало понятно, чтобы вывести текст на экран нужно воспользоваться командой echo
.
Но что значит первая строчка @echo off
? 🤔 Первая строчка отвечает за отключения «эхо», то есть, другими словами она отключает вывод командной строки. Представим, что вы ее не записали, и вот что у вас получится:
echo It’s my the first script on BATCH!
It’s my the first script on BATCH!
У вас отобразятся команды, которые вы записали в ваш скрипт, а потом их результат.
Комментарии, кодировка и перенос строки
Комментарии
Комментарии в коде чаще всего создаются, для описания какой-либо строчки или какого-либо блока кода.
Имеется несколько способов оставить комментарий:
@rem Смотри какой красивый комментарий rem А как тебе этот комментарий? :: И даже так можно!
Разницы не будет как вы это сделаете, комментарий не читается при исполнении скрипта — он только для вас.
Кодировка
Допустим вы захотели вывести текст в консоль, который написан кириллицей, но при выводе возникает проблема? Что это за символы?!
Для этого следует указать интернациональную кодировку UTF-8:
@echo off @rem chcp *сюда код кодировки* (65001 это UTF-8) chcp 65001 echo Привет, кириллица!
Перенос строк
Если у вас в коде имеется длинная строка, которую вы хотите перенести на другую строчку, чтобы визуально это смотрелось красиво и удобно, можно воспользоваться символом ^
:
@echo off chcp 65001 echo У меня есть очень большой текст, который по сути бессмысленный и я придумываю этот текст на ходу, ^ в прямом эфире и совершенно не важно, что здесь написано. С помощью ёлочки вверх, вы сможете перенести текст ^ на следующую строку и это очень просто работает, но если вывести этот текст в консоль, он будет идти в строчку.
А что, если вы хотите вывести текст выше также, как это было и в коде? Эти ^
ёлочки не способны такого сделать, и тут можно сделать такую штуку:
@echo off chcp 65001 set "n=&echo." echo Это можно сказать простая табуляция.%n%Точнее обычная переменная,^ которая может спокойно перенести строчку на следующую.%n%^ Переменные мы разберем в следующей главе.
Переменные
В BATCH переменные бывают глобальные 🔓 и локальные 🔒, изначально они все глобальные, а также их несколько видов.
Глобальные переменные можно использовать повсюду, в скрипте, другом bat-файле
, но только в текущей сессии. Что такое текущая сессия? 🤔 Простыми словами это открытая консоль в данный момент. Давайте разбираться, но для начала посмотрим, как можно создать самую простую переменную.
set variable_name=Simple variable
Любая переменная создается с ключевого слова set
, дальше можно указать тип переменной (необязательно), после обозвать её. Значения переменной указываются после символа =
без пробелов. Обычная переменная может содержать только строку (string).
@echo off @rem Моя первая переменная, и сейчас я ее выведу на экран. set text=Hello, world! echo %text%
Вывод:
Hello, world!
Как вы наверное догадались, чтобы получить значение переменной, нужно обернуть название переменной в символы %
.
Другой вид переменной, числовой.
С такой переменной можно проводить математические операции:
@echo off @rem Как мне сложить два числа? set /a number=2021 + 1 echo New %number% year
Вывод:
New 2022 year
Также можно создать две разных переменных и сложить их воедино.
@echo off set /a number1=100 set /a number2=899 set /a result=number1 + number2 echo %number1% + %number2% = %result%
Вывод:
100 + 899 = 999
Давайте расмотрим еще один вид переменной.
@echo off set /p input=Enter some text: echo %input%
Вход:
script запускаем файл
Enter some text: Don’t worry, smile!
Вывод:
Don’t worry, smile!
Такая переменная может принимать в себя данные, которые вы передадите.
Имеется еще один интересный вид переменной, она называется переменной аргумента.
Обозначается она таким образом: %1 %2 %3...
Вход:
script Something
Вывод:
Something
Когда мы запускаем наш bat-файл
из консоли, мы можем передать любой аргумент после его названия: script Something
.
script — название нашего файла, Something — наш желаемый аргумент. Если мы попытаемся передать несколько слов (аргументов) через пробел, то у нас засчитает только первое слово. То есть каждое новое слово по сути является новым аргументом.
Вход:
script Everything will be fine…
Вывод:
Everything
Этого можно избежать следующими способами:
- Указать больше переменных.
- Обернуть текст в кавычки
" "
- Указать символ
*
Способ первый:
Я хочу передать вот этот текст: Everything will be fine...
. Здесь 4 слова (необязательно слова, после каждого нового пробела получается новый аргумент)
@echo off echo %1 %2 %3 %4
Вход:
script Everything will be fine…
Вывод:
Everything will be fine…
Второй способ:
В этом способе я оберну текст в кавычки " "
Вход:
script «Everything will be fine…»
Вывод:
«Everything will be fine…»
Третий способ:
Вход:
script Everything will be fine…
Вывод:
Everything will be fine…
Также на основе таких переменных можно сделать небольшой калькулятор, для этого эту переменную нужно как-бы преобразовать в числовой тип:
@echo off set /a value=%1 echo %value%
Вход:
script 12+12
Вывод:
24
Локальные переменные
Локальные переменные задаются в блоке от setLocal
до endLocal
. Такими переменными нельзя воспользоваться за пределами блока, и также они недоступны в сессии, как глобальные.
@echo off set global_variable=I'm Global Elite setLocal set local_variable=I'm... I.. nobody?... endLocal
Попробуйте запустить этот скрипт, а после прописать в консоли echo %global_variable%
, получилось?
Теперь попробуйте echo %local_variable%
. Мм.. нет?
Также глобальными переменными можно пользоваться в других bat-файлах
. Попробуйте создать другой файлик и к примеру вывести глобальную переменную на экран.
В принципе все просто.
Практика:
- Попробуйте написать скрипт, который будет принимать ваше имя и возраст, после выводить его на экран.
Ваше имя: Даниил
Ваш возраст: 17
Привет, Даниил, а знаю, что тебе 17 лет!
- Попробуйте сделать простой калькулятор, который будет только складывать числа.
Введите первое число: 12
Введите второй число: 12
Ответ: 24
Циклы
Цикл for (по умолчанию)
Данный цикл используется для повторения файлов, пример:
@echo off for %%i in (C:\folder\fantasy.txt C:\folder\myths.txt) do ( copy %%i C:\Users\user\Desktop )
Разберем начало цикла, цикл создается с ключевого слова for
, следующим можно указать вид цикла /r
, /d
, /f
, /l
(необязательно). Вид цикла используется в разных ситуациях, в которых вы хотите его применить. Дальше в этом разберемся.
Переменная в цикле начинается с двух символов %%
, а после записывается само название (названием переменной должен служить 1 единственный символ). \
В ( )
записываем пути к файлам, с которыми в будущем будем осуществлять работу.
Работа осуществляется в теле цикла, чтобы туда попасть, нужно записать ключевое слово do
, открыть скобки ()
и приступить к написанию скрипта.
В этом случае, мы просто копируем файлы (fantasy.txt, myths.txt) в новую директорию.
Цикл for /R
Данный цикл используется для перебора файлов в директории:
@echo off for /r C:\folder %%f in (*.txt) do ( echo %%f )
Здесь мы уже указываем команду /r
, следующим можно передать папку, которая будет считаться корневой, если не передавать директорию (C:\folder) — текущая директория будет считаться корневой. Также поиск файлов будет осуществляться и в подпапках.
%%f
— является переменной. В скобках ( )
, можно передать файлы, по которым будет осуществляться поиск. Их может быть несколько (*.txt *.py *.bat)
или можно записать .
, она будет искать все файлы в целом (в подпапках тоже).
Цикл for /D
Используется для загрузки списка папок, которые являются подпапками текущей директории:
@echo off cd C:\folder for /d %%f in (f* n*) do ( echo %%f )
В данном примере мы получим список папок в директории C:\folder, которые начинаются с букв f
и n
. Если передать *
, мы получим список всех папок находящихся в директории.
Цикл for /l
Этот цикл служит для загрузки на ряде цифр (range of numbers):
@echo off for /l %%i in (1, 1, 10) do ( echo %%i )
В этом примере мы выведим цифры от 1 до 10. \
for /l %%i in (start, step, end) do ( echo %%i )
- start: Первое значение переменной
- step: После каждого повтора (iteration) значение переменной будет прибавлять ‘step’.
- end: Последнее значение.
…дописывается
Last Updated :
29 Sep, 2022
Batch Scripting consists of a series of commands to be executed by the command-line interpreter, stored in a plain text file. It is not commonly used as a programming language and so it is not commonly practiced and is not trending but its control and dominance in the Windows environment can never be neglected. Almost every task and every action can be performed and executed by a simple sequence of commands typed on the Windows Command Prompt.
Batch Script execution
There are 2 ways to execute a batch script.
- Type the batch script in the command prompt.
- Write the code of script in a file and execute it through the command prompt.
Typing commands again and again on the terminal can be a very tedious task to do if we have a very lengthy code. So option 2 is generally preferred to create batch files.
Creating Batch Files
Steps to create a Batch file are pretty simple:-
- Create a new text file with a ‘.txt‘ extension.
- Now rename this file with extension as ‘.bat‘ this creates a Batch file.
- Now open this .bat file in any text editor and start scripting.
To begin scripting we must be aware of the commands of the batch interface. The commands of Batch are sometimes similar to Linux Scripting commands.
Batch Commands
Basic batch commands are all case insensitive and can be used to perform a specific set of instructions:-
- DIR – The ‘dir’ command is used to get all the directories, sub-directories, and files present in the current working directory.
- CD – The ‘cd’ command is used to change the current working directory.
- VER – The ‘ver’ command tells the version of the user’s Windows.
- CLS – The ‘cls’ command is used to clear the screen of the command prompt.
- ECHO – The ‘echo’ command is by default ‘on’ but if we turn it off by ‘echo off’ it turns off prompt till the time ‘echo on’ is passed.
- @ – The ‘@’ if used before any command hides which command is running.
- @ECHO OFF – This commands serves as the start point to any basic batch script as it hides the prompt with ‘echo off’ and hides ‘echo off’ command with ‘@’.
- HELP – This command tells us all about the commands available in the cmd. It runs only if the cmd is run as an administrator.
How to execute a batch command through cmd(command prompt)
Data Types in Batch
- Integers – Batch supports the whole set of positive and negative integers
- Strings – Unlike most programming languages we rarely use (“”) double-quotes here but we use ‘echo‘ command to print strings
Note: Batch doesn’t support floating-point values i.e. values with precision.
Variables in Batch Scripting
A variable is an entity that stores a specific value and allows the user to perform any set of instructions on it. To create variables we use the command “SET” command. A variable, unlike many programming languages, can be assigned simply without specifying any data type to it.
SET my_variable=Hello World
To print this variable we need to use the command ECHO but with a slight variation. Since echo prints both strings and variables to print string we simply write the string after ECHO as
ECHO Hello World
But to print a variable we use ECHO in a different way bypassing the variable names inside two percent signs (%) so that variable name doesn’t become a string-
ECHO %my_variable%
Working with Batch Scripts
Creating our own Batch Scripts
Example 1: To print “GeeksForGeeks” on the command prompt with and without using a variable.
Without using a variable
ECHO GeeksForGeeks
With a variable
SET my_var=GeeksForGeeks ECHO %my_var%
Arithmetic Operators in a Batch Script
List of operators :
SET /A sum=1+1 ::addition operator ECHO %sum% SET /A mul=7*9 ::multiplication operator ECHO %mul% SET /A div=9/3 ::Division operator ECHO %div% SET /A assign=10 ::Assignment operator ECHO %assign% SET /A assign+=15 ::Increment then assignment operator ECHO %assign% SET /A mod= 10%3 ::Modulus/Remainder operator ECHO %mod%
Demonstration of all arithmetic operators
BAT-файлы, или, как их еще называют опытные пользователи, «батники» — это текстовые файлы с расширениями .bat
или .cmd
, которые хранят набор команд и выполняют их в терминале операционной системы. Такие файлы необходимы для автоматизации стандартной работы пользователей в Windows.
В данной статье будет подробно рассказано о всех процессах взаимодействия с bat-файлами, их работе и основных командах, которые используются в процессе создания таких файлов.
В данном разделе статьи поговорим о взаимодействии с bat-файлами. Для начала пройдемся по требованиям, которых будет достаточно для написания своего первого «батника»:
- Устройство с операционной системой Windows.
- Наличие блокнота, либо другого текстового редактора. Рекомендуем использовать редакторы с встроенной подсветкой синтаксиса — например, Notepad++.
Создание bat-файла
Перейдем к созданию bat-файла. Для этого откроем любой текстовый редактор и заполним его некоторым содержимым. В качестве примера, создадим bat-файл, который будет выводить в окне интерпретатора командной строки сообщение «Hello, user!»:
@echo off
echo Hello, user!
pause
Теперь необходимо сохранить файл, используя расширение .bat
. Для этого переходим в меню и выбираем «Сохранить как…», как показано на картинке ниже.
Далее необходимо выбрать тип файлов в открывшемся окне. Для этого открываем соответствующий выпадающий список и выбираем «Все файлы», а в строке выше указываем имя файла и его расширение. Результат продемонстрирован на картинке ниже.
Пример выше подходит для пользователей, которые используют блокнот в качестве текстового редактора. Если пользователь использует Notepad++, то в типе файла выбираем «Batch file», как показано на рисунке ниже.
Если вдруг пользователь сохранил файл с неправильным расширением — ничего страшного. Это можно исправить, переименовав файл и указав правильное расширение. Чтобы это сделать, необходимо включить отображения расширений во вкладке проводника «Вид».
Запуск bat-файла
Чтобы запустить bat-файл, достаточно кликнуть по нему два раза левой кнопкой мыши. Стоит учитывать, что некоторые «батники» могут содержать команды, требующие прав администратора. Такие файлы сами не запрашивают расширенных прав, поэтому их нужно запускать исключительно от имени администратора, используя правую кнопку мыши.
Перечисленные выше методы запуска допустимы только в тех случаях, когда пользователь не ожидает ответа после запуска «батника». Если же запуск подразумевает какое-то системное сообщение или численный результат как ответ на выполнение команд, тогда необходимо выполнять запуск, используя интерпретатор командной строки.
Чтобы запустить интерпретатор командной строки, достаточно выполнить сочетание клавиш WIN+R, вписать в поле ввода cmd
и нажать клавишу Enter. В результате откроется окно командной строки, в которое необходимо перенести нужный файл для его запуска и нажать клавишу Enter.
После выполненных действий, «батник» начнет выполнение команд и отобразит необходимый результат, если это запланировано.
Запустим тестовый файл, который мы создавали немного ранее и посмотрим на результат.
Как видно по картинке выше, сообщение успешно отобразилось.
Настройка периодического запуска
Полезная функция при работе с bat-файлами – это возможность запускать их с некоторой периодичностью. Для реализации понадобится встроенный в Windows сервис — «Планировщик заданий».
Откроем «Планировщик заданий». Для этого используем комбинацию клавиш WIN+R и вводим taskschd.msc
в поле ввода, после чего нажимаем клавишу Enter.
В открывшемся окне планировщика выбираем в правом меню «Действия» пункт «Создать простую задачу…». После этого откроется окно «Мастер создания простой задачи», в которой пользователю будет предложено заполнить 4 вкладки:
- Создание простой задачи. Здесь будем указывать имя и описание задачи.
- Триггер. Данная вкладка отвечает за выбор периода (как часто будет запускаться bat-файл и в какое время).
- Действие. Здесь необходимо выбрать запуск программы и нажать «Далее». После этого пользователь указывает путь до необходимого «батника».
- Завершение. В данной вкладке происходит проверка всех введенных данных.
По завершении заполнения всех вкладок bat-файл добавляется в расписание Windows и будет автоматически запускаться в указанный период.
Синтаксис написания bat-файла
Ниже будут представлен список основных правил, которые нужно знать при написании bat-файла:
- Любая команда должна быть определена с новой строки.
- Указанные в файле команды выполняются строго по порядку, от первого к последнему. Исключением являются те случаи, когда внутри файла организован переход от одной части к другой (например
goto
). - Чтобы исключить возможные ошибки, директории указываются в кавычках.
|Y|
указывается перед командами, которые требуют подтверждения (Напримерdel
илиformat
).- Возможно указывать два типа команд: встроенные и внешние. Первые — это команды самого интерпретатора командной строки (о них мы поговорим позже). Ко второму типу относятся все возможные исполняемые файлы (расширения
.EXE
,.CMD
или.BAT
). - Для отключения отображения командной строки в открывшемся окне интерпретатора, после запуска «батника», используется
@echo off
в начале файла.
cloud
Комментирование
Оставлять комментарии во время написания bat-файла возможно тремя способами:
rem
. После ее объявления указывается необходимый комментарий.
rem текст_комментария
- Двойное двоеточие. Работает аналогично команде
rem
.
:: текст_комментария
goto
. К ней нужен особый подход, так как она используется не только для комментирования, но и для перехода к другой части bat-файла. После объявление команды указывается метка (в примере ниже —start
).
goto start
текст_комментария
:start
Для каждого комментария должна быть объявлена своя уникальная метка.
Основные команды
Ниже в таблице представим основные команды, использующиеся при написании bat-файла, а также аргументы к ним и их описание.
Команда |
Аргумент |
Описание |
|
Каталог |
Переход к указанному каталогу (пустой аргумент — возвращение текущей директории). |
|
— |
Приостановка пакетного файла. |
|
Путь к файлу/команда |
Выполнение указанной программы либо команды в отдельном окне. |
|
Каталог |
Создание каталога. |
|
Исходные файлы (путь к ним) и каталог/имя, куда копировать |
Копирование одного или нескольких файлов в указанный каталог. |
|
Имя файла или каталога |
Удаление одного или нескольких файлов. |
|
Путь до файла для запуска |
Запуск пакетного файла из другого. |
|
Имя заголовка |
Изменение заголовка окна. |
|
Исходный и конечный путь к файлу/файлам |
Перемещение одного файла или группы файлов из одного каталога в другой. |
|
Цвет фона и текста (задается цифрой либо буквой) |
Изменение цветов текста и фона. |
|
— |
Завершение работы пакетного файла. |
Это не полный список. Чтобы ознакомиться со всеми командами, достаточно написать в строке интерпретатора командной строки help
, как показано на картинке ниже.
Переменные
Кроме команд, стоит упомянуть о переменных, которые также можно использовать при написании bat-файла.
Для добавления переменной существует команда set
. Чтобы объявить переменную, необходимо написать в строке set
, а затем ее имя и значение. Если необходимо обратиться к переменной и считать ее значение, то к имени переменной слева и справа добавляется символ %
. Приведем ниже пример:
@echo off
set example=Hello, user!
echo %example%
pause
Учитывайте, что пробелы перед знаком равенства и после не ставятся, иначе программа не будет работать. Результат запуска «батника» из примера выше продемонстрирован на картинке ниже.
Также, при объявлении переменной можно воспользоваться флагом /a
, который отвечает за присваивание переменной числа. Например:
@echo off
set /a example=2*3
echo %example%
pause
При отсутствии такого флага, переменной присваивается вся строка после знака равенства. Результат представленной выше программы продемонстрирован на картинке:
Кроме обычных переменных существуют переменные аргумента. Данным переменным присваиваются значения, которые передаются в момент вывоза bat-файла. Выглядят они следующим образом: %1
, %2
, %3
и т.д.
Приведем пример для лучшего понимания:
@echo off
@echo First argument variables - : %1
@echo Second argument variables - : %2
@echo Third argument variables - : %3
pause
Во время запуска представленного выше «батника», передадим строку «Hello, user!». Результат будет продемонстрирован на картинке ниже.
Пример bat-файла: удаление ненужных файлов
Во время работы у пользователей часто остаются ненужные файлы, которые необходимо почистить. С этой целью отлично справляется корректно написанный «батник».
Например, у пользователя во время работы появляется много файлов с расширением .txt
в некотором каталоге и его подкаталогах, которые необходимо подчистить. Реализуем для этого случая простой «батник»:
@echo off
del /f /s /q C:\путь_к_каталогу\Example\*.txt
Разберем работу каждого флага:
/f
— данный флаг позволяет удалять все возможные файлы (даже те, что открыты только для чтения)./s
— флаг позволяет удалять файлы не только из каталога, но и его подкаталогах./q
— данный флаг убирает подтверждение удаления файлов.
Теперь создадим каталог Example
и подкаталог ExampleWithTXT
, а после добавим и в первый, и во второй файлы с расширением .txt
, чтобы проверить работоспособность созданного выше «батника»:
mkdir Example
cd Example
mkdir ExampleWithTXT
notepad Example1.txt
notepad Example2.txt
notepad Example3.txt
cd ExampleWithTXT
copy C:\путь_к_каталогу\Example\*.txt
После выполнения всех команд будет создан тестовый каталог Example
с тремя текстовыми файлами и подкаталогом ExampleWithTXT
. В последний были скопированы три текстовых файла из родительского каталога.
Теперь запустим bat-файл и посмотрим на результат. Он будет представлен на картинке ниже.
Все файлы с расширением .txt
были успешно удалены из каталога Example
и подкаталога ExampleWithTXT
.
Заключение
В инструкции был подробно описан процесс создания bat-файлов и дальнейшего взаимодействия с ними. Также были продемонстрированы основные команды и их описание. Следуя инструкции, пользователь сможет создать свой первый «батник» и успешно автоматизировать работу в операционной системе Windows.