Решаем практические задачи на батниках
Батники это не мощный язык программирования, но, в то же время, на нем можно решить много рутинных задач. Цель статьи не просто рассказать о возможностях Windows-консоли, а показать их, решая практические задачи с которыми мне приходилось сталкиваться.
Подтверждение выполнения
set answer= set /p answer="Выполнить? [y/n]:" if not "%answer%" == "y" exit /b
Устанавливаем переменную answer в пустое значение (необходимо, для того чтобы затереть предыдущее значение, например, если батник исполняется несколько раз). set с ключом /p устанавливает значение переменной, которое вводится пользователем. Проверяем значение переменной и если оно не равно y завершаем выполнение батника.
Как получить текущий месяц, день, год и т.п.?
В батниках есть возможность получать подстроку используя синтаксис %variable:~m,n% Где variable это название переменной m – индекс первого символа, а n – количество символов подстроки.
Следовательно, если команда echo %date% (а формат даты может у вас отличатся) выведет 13.06.2009, то для того чтобы получить текущий месяц достаточно выполнить %date:~3,2% Таким образом, если нам необходимо, например, сформировать имя файла или директории, которое соответствует текущему месяцу и дню, мы это сделаем так:
set fname=%date:~3,2%%date:~0,2%
Лично мне такое понадобилось для задания ключа /d для xcopy.
Как вывести пустую строку в лог-файл?
Я не сразу догадался, что это можно делать вот так: 🙂
echo.>> %logfile%
Т.е. нужно поставить точку после echo.
Предыдущая команда выполнена успешно?
В большинстве случаев это:
if %errorlevel%==0 ( echo OK>> %logfile% ) else ( echo ERROR #%errorlevel% >> %logfile% )
Архивирование файла с переменным именем
for %%i in (c:\dir\#fe*.*) do rar a -ep c:\other_dir\%%~ni.rar %%i
Задача состоит в том, чтобы заархивировать файл с именем, которое меняется ежедневно, но в другую папку. Следующим куском кода
for %%i in (c:\dir\#fe*.*) do
мы выбираем все файлы по маске, исполняя команду rar a -ep c:\other_dir\%%~ni.rar %%i для каждого, где %%~ni это только имя файла.
Имя текущего исполняемого батника
Нужно, например, для того чтобы вести один лог для нескольких батников.
«Функция» в батниках
Если мы исполняем в одном батнике несколько повторяющихся команд, но с разными значениями переменных, то это можно реализовать так:
set thebat=c:\Program Files\The Bat!\thebat.exe set action=SEND set [email protected] set subject=Subject_1 set attach=c:\dir\file. call :mailit set [email protected] set subject=Subject_2 set attach=c:\dir\file*.rar call :mailit … exit :mailit @echo on "%thebat%" /MAILTO="%mailto%";SUBJECT="%subject%";ATTACH="%attach%";%action% >> %logfile% @echo off exit /b
Таким образом, у меня отсылается десяток разных файлов разным получателям, используя The Bat! Такой файл читать и редактировать намного удобнее, чем это было бы десять команд The Bat! подряд.
Получить последний по дате создание файл
Для начала получим список всех файлов, отсортированных по дате модификации:
dir /b /od /a-d c:\dir\file_*.xls
И пройдемся по нему циклом.
for /f "tokens=*" %%a in (' dir /b /od /a-d c:\dir\file_*.xls ') do set "lastfile=%%a"
Логично, что по завершению цикла в переменной %lastfile% у нас будет последний по дате модификации файл 😉
Выкачать файл по FTP
ftp -s:file_to_ftp.txt 127.0.0.1
Где файл file_to_ftp.txt будет у нас выглядеть следующим образом:
login password bin cd /files put file.xls quit
Создаем нумерованные каталоги с инкрементом на единицу
set dir_last= for /f "tokens=*" %%i in ('dir /ad /b') do set dir_last=%%i if '%dir_last%'=='' (set dir_last=000) set dir_last=1%dir_last% set /a dir_last = %dir_last% - 1000 set /a dir_new=%dir_last% + 1 set dir_new=00%dir_new% set dir_new=%dir_new:~-3% md %dir_new%
Разобраться в коде предлагаю вам самим. 🙂 Основная возможность, которую я хотел показать данным примером, это использование ключа /a команды set для вычисления выражений. 😉
Batch script для начинающих
Мне 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 Это самая лучшая прога в мире.
Код включает русские символы и другие из 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», то выводиться значение после символа » bash»>@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»
Как создать и запустить bat-файлы
Bat-файл – это текстовый файл, который содержит в себе набор команд для выполнения в командной строке. Такие файлы используются при работе с ОС Windows и обозначаются расширением .bat. Название bat-файла происходит от английского “batch file” – пакетный файл, продвинутые пользователи часто используют название “батник”.
Bat-файлы используются для автоматизации задач и выполнения ряда команд, без применения ввода данных в командную строку.
Зачем нужны bat-файлы:
- Автоматизация задач. Например, для повторяющихся типов действий: копирование, переименование файлов, создание резервных копий. Благодаря bat-файлам, можно запустить серию команд одним нажатием кнопки, что экономит время и не требует необходимость вводить однотипные команды вручную.
- Выполнение скриптов. Bat-файлы используют для выполнения скрипта на командном языке, например, CMD или PowerShell. Это позволяет создавать и запускать скрипты для выполнения сложных задач без необходимости запуска каждой команды по отдельности.
- Конфигурация системы. Bat-файлы могут использоваться для настройки и конфигурации операционной системы Windows, например, чтобы изменять системные переменные, устанавливать параметры безопасности, настраивать сетевые подключения.
Если вы ищите надежный выделенный сервер с операционной системой Windows, предлагаем воспользоваться услугой Windows VDS/VPS от RU-CENTER.
Как создать bat-файл
Для создания bat-файла понадобится устройство с ОС Windows и любой текстовый редактор. Следуйте инструкции:
- Откройте текстовый редактор, например, Блокнот или Visual Studio Code.
- Создайте в нем пустой файл.
- Запишите команду в том виде, как бы вы вводите ее в командную строку (каждую новую команду указывайте на отдельной строке).
- Добавьте любую необходимую логику или условные операторы, например, if-else или циклы, чтобы определить, какие команды будут выполняться в зависимости от определенных условий.
- Сохраните файл с расширением .bat. Для этого выберите Сохранить как и укажите тип файла Все файлы, добавьте расширение .bat в конце имени файла (например, myscript.bat).
- Создания bat-файла завершено.
Запуск bat-файла
Есть несколько способов запустить bat-файл:
- Найдите bat-файл с помощью Проводника и дважды щелкните на него. Это запустит файл. Команды в нем будут автоматически выполнены в командной строке.
- Из командной строки. Откройте командную строку, перейдите в директорию, где находится bat-файл, и введите имя файла. Кликните Enter, чтобы запустить bat-файл.
- С помощью ярлыка на рабочем столе. Щелкните правой кнопкой мыши на bat-файле, выберите Отправить, затем выберите Рабочий стол (создать ярлык). После создания ярлыка переместите его на рабочий стол и дважды щелкните на нем для запуска.
- Через Планировщик заданий. Можно настроить запуск bat-файла в определенное время или при определенных событиях с помощью Планировщика заданий. Для этого откройте Планировщик, создайте новое задание и укажите путь к bat-файлу в разделе Действие.
Независимо от способа запуска bat-файла, команды в файле будут выполнены последовательно в командной строке, в том же окне или в новом, в зависимости от настроек и команд в самом файле.
Синтаксис написания bat-файла
При написании bat-файла необходимо учитывать следующие правила:
- Комментарии в bat-файлах начинаются с символа REM (от английского remark – замечание) или :: (двойные двоеточия) и используются для пояснения кода.
- Команды в bat-файле записываются на отдельных строках и выполняются последовательно, начиная с верхней строки.
- При использовании переменных для хранения значений в bat-файле, их имена должны начинаться с символа %, и значения переменных устанавливаются с помощью оператора SET, например:
- В bat-файле можно использовать условные операторы, такие как IF и FOR, для выполнения команд в зависимости от определенных условий.
- С помощью оператора FOR можно создавать циклы для выполнения команд несколько раз или по списку значений.
Настройка планировщика заданий (периодический запуск)
Чтобы настроить запуск bat-файла в заданное время используйте планировщик задач Windows:
- Откройте Планировщик, нажав Win + R, введите taskschd.msc и нажмите Enter.
- Нажмите на Создать задачу в правой части окна.
- Во вкладке Основные введите имя задачи и описание (необязательно), нажмите Далее.
- Во вкладке Действия нажмите на Создать, в выпадающем меню выберите Запуск программы.
- В строке Программа/скрипт укажите путь к bat-файлу, который вы хотите запускать. Кликните на кнопку Обзор, чтобы найти bat-файл на компьютере.
- Настройте остальные параметры по вашему усмотрению: вы можете указать условия запуска, триггеры, параметры задачи и т.д.
- Когда все настройки сделаны, нажмите ОК, чтобы сохранить задачу.
Теперь ваш bat-файл будет запускаться автоматически в заданное время или по указанным условиям заданным в планировщике задач.
Bat-файл: основные команды при написании
Приведем несколько основных команд, которые можно использовать при написании bat-файла:
- echo – для вывода текста или переменных в командную строку или в файл.
- set – для определения или изменения значения переменной.
- if – для выполнения команд в зависимости от определенных условий.
- for – для создания циклов и повторного выполнения команд.
- call – для вызова другого bat-файла из текущего.
- pause – для остановки выполнения скрипта и ожидания, пока пользователь не нажмет клавишу.
- rem – для добавления комментариев в скрипт. Комментарии игнорируются интерпретатором bat-файлов.
- cd – для перехода в другой каталог.
- del – для удаления файлов.
- copy – для копирования файлов.
Bat-файл: переменные
При написании bat-файла также применяют переменные, которые используются для хранения и управления значениями данных. Они позволяют создавать гибкие скрипты, облегчают автоматизацию повторяющихся задач и упрощают изменение значений в различных частях скрипта.
Чтобы использовать переменные в bat-файлах, следует сначала задать ее с помощью команды set. Значение переменной указывается с помощью символа %.
echo My name is %NAME%
В этом примере значение переменной NAME задается как Ivan, и далее выводится на экран при помощи команды echo
В bat-файлах можно использовать несколько типов переменных:
- Строковые переменные:
- Числовые переменные:
- Параметры командной строки:
- Системные переменные:
- Временные переменные:
При подготовке материала использовались источники:
https://habr.com/ru/articles/64581/
https://habr.com/ru/sandbox/168937/
https://www.nic.ru/help/kak-sozdat6-i-zapustit6-bat-fajly_11640.html