Перейти к основному содержимому

Сценарии для автоматизации

Разработчику Архитектору Инженеру

Сценарии для автоматизации

Что такое BAT-файлы

BAT-файлы (батники) представляют собой текстовые файлы с расширением .bat, содержащие последовательность команд для командной строки Windows (CMD). Эти файлы служат инструментом для автоматизации рутинных операций, таких как копирование файлов, очистка системы, установка программного обеспечения и настройка сетевых параметров. BAT-файлы позволяют выполнять комплексные задачи одним кликом, значительно упрощая работу с операционной системой.

BAT-файлы являются одним из самых доступных способов автоматизации в среде Windows. Они не требуют установки дополнительного программного обеспечения, так как используют встроенный интерпретатор командной строки. Каждый современный компьютер под управлением Windows поддерживает выполнение этих скриптов без дополнительной настройки.


Создание первого BAT-файла

Для создания простого скрипта выполните следующие шаги:

  1. Создайте новую папку на рабочем столе или в любом удобном месте
  2. Внутри папки создайте текстовый файл с расширением .bat, например hello.bat
  3. Откройте файл с помощью Блокнота
  4. Введите следующий код:
@echo off
echo Hello World
pause
  1. Сохраните файл и закройте редактор
  2. Дважды кликните по файлу для запуска

При выполнении этого скрипта откроется окно командной строки, отобразится текст "Hello World", и программа остановится в ожидании нажатия любой клавиши. Это простейший пример создания файла с текстовым содержимым через командную строку.


Предотвращение мгновенного закрытия окна

Командная строка автоматически закрывается после выполнения всех команд в скрипте. Для предотвращения мгновенного закрытия окна используются специальные команды:

pause — приостанавливает выполнение скрипта и ожидает нажатия любой клавиши пользователем. Эта команда выводит сообщение "Для продолжения нажмите любую клавишу..."

timeout /t [секунды] — приостанавливает выполнение на указанное количество секунд. Например, timeout /t 5 остановит выполнение на 5 секунд.

cmd /k — сохраняет окно командной строки открытым после выполнения всех команд. Эта команда часто используется в конце скрипта для анализа результатов выполнения.


Синтаксис BAT-файлов

Структура команд

Каждая команда в BAT-файле записывается с новой строки. Порядок выполнения команд строго последователен — команды выполняются сверху вниз, одна за другой. Интерпретатор читает файл построчно и выполняет каждую команду в момент её чтения.


Указание директорий

Для работы с файлами и папками в скриптах используются абсолютные или относительные пути:

Абсолютный путь — полный путь к файлу, начиная с буквы диска:

C:\Users\Username\Documents\file.txt

Относительный путь — путь относительно текущей директории скрипта:

.\folder\file.txt
..\parent_folder\file.txt

Специальные символы для навигации:

  • . — текущая директория
  • .. — родительская директория
  • \ — корневая директория диска

Комментарии

Комментарии в BAT-файлах начинаются с символа REM (remark) или :::

REM Это комментарий, который не выполняется
:: Это тоже комментарий
echo Эта команда выполнится

Комментарии помогают документировать код и объяснять назначение отдельных частей скрипта.


Пунктуация и разделители

Команды в BAT-файлах разделяются символами перевода строки. Для выполнения нескольких команд в одной строке используется символ &:

echo Первая команда & echo Вторая команда

Для условного выполнения команд используются символы && (выполнить следующую команду только если предыдущая успешна) и || (выполнить следующую команду только если предыдущая неудачна).


Подтверждение действий Y/N

Некоторые команды запрашивают подтверждение перед выполнением опасных операций. Для автоматического подтверждения используется флаг /y:

del /y file.txt

Эта команда удалит файл без запроса подтверждения.


Встроенные и внешние команды

Встроенные команды — команды, которые являются частью интерпретатора CMD и доступны всегда:

  • echo, pause, cd, dir, copy, del, if, goto

Внешние команды — отдельные исполняемые файлы, которые вызываются из командной строки:

  • ping, ipconfig, taskkill, robocopy

Команда @echo off

Команда @echo off отключает вывод самих команд в консоль, показывая только результат их выполнения. Символ @ в начале предотвращает вывод самой команды echo off:

@echo off
REM Без @ первая строка выведет "echo off"
echo Это сообщение отобразится

Без @echo off каждая команда сначала выводится на экран, а затем выполняется, что создаёт избыточный вывод.


Основные команды BAT-файлов

Управление выводом

@echo off — скрывает отображение команд, показывая только результат их выполнения. Эта команда обычно размещается в начале скрипта для чистого вывода.

echo [текст] — выводит указанный текст на экран. Команда может использоваться для информирования пользователя о ходе выполнения скрипта:

echo Начинаю копирование файлов...
echo Операция завершена успешно

echo. — выводит пустую строку для форматирования вывода.


Управление выполнением

pause — приостанавливает выполнение скрипта до нажатия любой клавиши. Полезна для просмотра результатов перед закрытием окна.

timeout /t [секунды] — приостанавливает выполнение на указанное количество секунд:

timeout /t 10
REM Ожидание 10 секунд

exit — немедленно завершает выполнение скрипта и закрывает окно командной строки.


Работа с файлами и папками

del [параметры] [файл] — удаляет указанные файлы:

  • /s — удаляет файлы из всех подпапок
  • /q — тихий режим, без запроса подтверждения
  • /f — принудительное удаление только для чтения файлов
del /s /q /f C:\Temp\*.tmp

copy [источник] [назначение] — копирует файлы:

copy file.txt backup.txt
copy *.txt C:\Backup\

xcopy [параметры] [источник] [назначение] — расширенное копирование с поддержкой подпапок:

  • /e — копирует все подпапки, включая пустые
  • /i — предполагает, что назначение является папкой
  • /y — подавляет запрос подтверждения перезаписи
xcopy C:\Source\* C:\Destination\ /e /i /y

robocopy [источник] [назначение] [параметры] — надёжное копирование файлов с расширенными возможностями:

  • /mir — зеркалирование каталогов
  • /r:3 — количество повторных попыток при ошибке
  • /w:5 — время ожидания между попытками в секундах
robocopy C:\Source C:\Destination /mir /r:3 /w:5

mkdir или md — создаёт новую папку:

mkdir C:\NewFolder

rmdir или rd — удаляет папку:

  • /s — удаляет папку и все её содержимое
  • /q — тихий режим
rmdir /s /q C:\OldFolder

Условные операторы и циклы

if [условие] [команда] — выполняет команду, если условие истинно:

if exist file.txt echo Файл существует
if not exist file.txt echo Файл не найден
if %errorlevel%==0 echo Операция успешна

goto [метка] — передаёт управление на указанную метку в скрипте. Метки начинаются с символа ::

goto end
:begin
echo Это не выполнится
:end
echo Это выполнится

for — цикл для перебора файлов или значений:

for %%f in (*.txt) do echo Найден файл: %%f
for /l %%i in (1,1,10) do echo Итерация %%i

Основные флаги команд

Флаги команды del

  • /s — рекурсивное удаление из всех подпапок
  • /q — тихий режим без подтверждения
  • /f — принудительное удаление защищённых файлов
  • /a — удаление файлов с определёнными атрибутами

Флаги команды copy

  • /y — подавление запроса подтверждения перезаписи
  • /v — проверка правильности записи
  • /b — копирование в двоичном режиме
  • /a — копирование в текстовом режиме

Флаги команды xcopy

  • /e — копирование всех подпапок, включая пустые
  • /i — предположение, что назначение является папкой
  • /y — подавление запроса подтверждения
  • /d — копирование только файлов, изменённых после указанной даты
  • /exclude:file — исключение файлов, перечисленных в файле

Флаги команды robocopy

  • /mir — зеркальное копирование (полное соответствие)
  • /e — копирование подпапок, включая пустые
  • /z — копирование с возможностью возобновления
  • /r:n — количество повторных попыток при ошибке (по умолчанию 1 миллион)
  • /w:n — время ожидания между попытками в секундах (по умолчанию 30)
  • /log:file — запись журнала в файл
  • /np — без индикатора прогресса

Пример автоматизации запуска Python кода

BAT-файлы часто используются для запуска скриптов на других языках программирования. Для автоматизации выполнения Python кода создайте следующий скрипт:

@echo off
echo Запуск Python скрипта...
echo.

python script.py

if %errorlevel%==0 (
echo.
echo Скрипт выполнен успешно!
) else (
echo.
echo Произошла ошибка при выполнении скрипта
echo Код ошибки: %errorlevel%
)

pause

Этот скрипт выполняет следующие действия:

  1. Отключает вывод команд
  2. Выводит информационное сообщение
  3. Запускает Python скрипт script.py
  4. Проверяет код возврата выполнения
  5. Выводит соответствующее сообщение об успехе или ошибке
  6. Ожидает нажатия клавиши перед закрытием

Для работы этого скрипта необходимо, чтобы Python был установлен и добавлен в переменную окружения PATH, или указать полный путь к исполняемому файлу Python:

C:\Python39\python.exe script.py

Примеры полезных скриптов

Создание структуры папок и файлов

@echo off
echo Создание структуры проекта...
echo.

mkdir Project
mkdir Project\Source
mkdir Project\Build
mkdir Project\Documentation

echo # Project Documentation > Project\Documentation\README.md
echo Проект создан успешно > Project\Documentation\README.md

echo.
echo Структура проекта создана
pause

Очистка временных файлов

@echo off
echo Очистка временных файлов...
echo.

del /s /q /f %temp%\*.tmp
del /s /q /f %temp%\*.log
del /s /q /f %temp%\*.bak

echo.
echo Временные файлы удалены
pause

Резервное копирование папки

@echo off
echo Создание резервной копии...
echo.

set SOURCE=C:\ImportantData
set DESTINATION=D:\Backup
set TIMESTAMP=%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,2%
set BACKUP_FOLDER=%DESTINATION%\Backup_%TIMESTAMP%

mkdir "%BACKUP_FOLDER%"
robocopy "%SOURCE%" "%BACKUP_FOLDER%" /e /r:3 /w:5

echo.
echo Резервная копия создана в %BACKUP_FOLDER%
pause

Отправка HTTP запроса

@echo off
echo Отправка HTTP запроса...
echo.

curl -X GET "https://api.example.com/data" -H "Accept: application/json"

if %errorlevel%==0 (
echo.
echo Запрос выполнен успешно
) else (
echo.
echo Ошибка при выполнении запроса
)

pause

Проверка доступности сервера

@echo off
echo Проверка доступности сервера...
echo.

set SERVER=8.8.8.8
ping -n 4 %SERVER%

if %errorlevel%==0 (
echo.
echo Сервер %SERVER% доступен
) else (
echo.
echo Сервер %SERVER% недоступен
)

pause

Автоматическая установка программ

@echo off
echo Установка программного обеспечения...
echo.

echo Установка 7-Zip...
start /wait 7z2107-x64.exe /S

echo Установка Notepad++...
start /wait npp.8.4.8.Installer.x64.exe /S

echo.
echo Установка завершена
pause

Очистка корзины

@echo off
echo Очистка корзины...
echo.

powershell.exe -Command "Clear-RecycleBin -Force"

echo.
echo Корзина очищена
pause

Планировщик заданий Windows

Планировщик заданий (Task Scheduler) позволяет автоматизировать запуск BAT-файлов по расписанию без участия пользователя. Это мощный инструмент для выполнения регулярных задач.

Доступ к планировщику заданий

Откройте планировщик заданий через:

  • Команду taskschd.msc в окне "Выполнить" (Win + R)
  • Панель управления → Администрирование → Планировщик заданий
  • Поиск "Планировщик заданий" в меню Пуск

Создание задачи для запуска BAT-файла

  1. В планировщике заданий выберите "Создать задачу" в правой панели

  2. На вкладке "Общие" укажите имя задачи и описание

  3. На вкладке "Триггеры" нажмите "Создать" и настройте расписание:

    • Ежедневно, еженедельно, ежемесячно
    • В определённое время
    • При запуске системы
    • При входе пользователя в систему
  4. На вкладке "Действия" нажмите "Создать":

    • Действие: "Запустить программу"
    • Программа/скрипт: путь к вашему BAT-файлу
    • Начать в: рабочая папка скрипта (опционально)
  5. На вкладке "Условия" настройте дополнительные параметры:

    • Запускать только при питании от сети
    • Запускать только при подключении к сети
    • Остановить при переходе на питание от батареи
  6. На вкладке "Параметры" укажите:

    • Разрешить запуск задачи по запросу
    • Остановить задачу, если она выполняется дольше указанного времени
    • Перезапустить задачу при сбое
  7. Нажмите "ОК" для сохранения задачи


Пример настройки ежедневной очистки

Для создания задачи ежедневной очистки временных файлов:

  1. Создайте BAT-файл daily_cleanup.bat:
@echo off
del /s /q /f %temp%\*.*
del /s /q /f C:\Windows\Temp\*.*
  1. В планировщике заданий создайте новую задачу:
    • Имя: "Ежедневная очистка"
    • Триггер: Ежедневно в 03:00
    • Действие: Запустить C:\Scripts\daily_cleanup.bat
    • Условия: Запускать только при питании от сети
    • Параметры: Остановить задачу через 1 час

Запуск задачи с повышенными правами

Для выполнения задач, требующих административных прав:

  1. В свойствах задачи перейдите на вкладку "Общие"
  2. Установите флажок "Запускать с наивысшими правами"
  3. В поле "При наличии" выберите "Независимо от входа пользователя в систему"

Мониторинг выполнения задач

Планировщик заданий предоставляет журнал выполнения задач:

  1. Выберите задачу в списке
  2. В правой панели нажмите "Показать все запуски"
  3. Просмотрите историю выполнения с указанием статуса и времени

Для включения ведения журнала:

  1. В меню "Действие" выберите "Включить журнал"
  2. Укажите максимальный размер журнала
  3. Настройте параметры хранения записей

Экспорт и импорт задач

Задачи можно экспортировать в XML файл для переноса на другие компьютеры:

  1. Выберите задачу
  2. В правой панели нажмите "Экспорт"
  3. Укажите путь для сохранения XML файла

Для импорта задачи:

  1. В меню "Действие" выберите "Импорт задачи"
  2. Выберите XML файл с сохранённой задачей
  3. Настройте параметры при необходимости

Планировщик заданий предоставляет гибкие возможности для автоматизации выполнения скриптов в заданное время или при наступлении определённых событий, что делает его незаменимым инструментом для системных администраторов и продвинутых пользователей.


Освоение главы0%