Начало в BAT

Домашняя | Софт | Моб. версия

Загрузка...

  • Местное время
  • Пишем BAT скрипты

  • Данная статья будет про базовые BAT
    команды для начала в этой сфере.

    Допустим вам нужно автоматизировать процесс, и файлы BAT/CMD отлично в этом помогут, особенно новичкам. Файлы BAT/CMD - это последовательность команд, которую вводит командная строка автоматически, но это, грубо говоря, простейший язык программирования так, как в командной строке есть команды, которые подходят для этих задач, например: операторы переменных

    Пачка команд 1 - начало скрипта

    Начало скрипта положено начинаться с
    echo off
    эта команда выключает строчку ввода, и в окно не будут выводиться вводы команд.
    echo on
    этот действует наоборот, включает отображение. Теперь идёт команда
    chcp 65001
    она включает кодировку UTF-8
    что исправит кракозябры при вводе русского текста, что-бы не было текста Active code page в той же строке после команды chcp 65001 добавьте с пробелом
     > nul
    это передаёт ответ команды со строчки в пустоту (поэтому nul), так же, ответ команды можно передавать в файл, скрипт его сам создаст
    chcp 65001 > chcp.bat
    он перезаписывает/создаёт файл chcp.bat и там будет содержимое "Active code page" Вообщем, начало кода должно быть таким:
    echo off
    chcp 65001 > nul

    Пачка 2 - базовые

    Пройдёмся тут быстро, т.к. команды просто из CMD
    CLS
    Очистка экрана
    echo {текст}
    Вывод текста или значения переменной
    title {текст}
    Установка имени окна на текст/значение переменной
    pause
    Пауза скрипта до нажатия любой клавиши. Так же её круто совместить с > nul, и вместо английского текста можно ввести что-то своё, тому пример:
    echo Нажми любую клавишу для продолжения!
    pause > nul
    
    timeout
    тот же pause, но с таймером, после аргумента /t установите целое значение в секундах, и у вас будет задержка между командами. Аргумент /nobreak снимет возможность прервать таймер и продолжить сразу после нажатия любой клавиши. Так же не забывайте про > nul, он показывает ответ с таймером до продолжения
    timeout /t 3 /nobreak > nul
    echo жди 3 секунды
    /t {задержка}, /nobreak для отключения прерывания.
    :флаг, goto
    Двоеточие перед именем флага ставит флаг, перейти к нему можно командой goto {имя флага без двоеточия}, так можно создавать круги и более удобное перемещение по строкам.
    :start
    chcp 65001 > nul
    echo Нажмите любую клавишу для установки utf-8
    pause > nul
    goto start
    
    Так же в системе есть свой флаг EOF, он стоит всегда в конце файла, можно так делать переходы к концу скрипта. Так же есть другая версия goto
    call файл.bat :флаг
    Эта команда вызывает команды bat файлов
    call updater.bat :flag
    Для вывода даты используйте команду
    date /t
    а для времени используйте
    time /t
    В обеих командах используется аргумент /t, он отменяет установку нового времени, если запустить команды без этого аргумента, то после показа времени будет запрос на установку нового времени. Можно использовать это так:
    title Установщик даты/времени
    echo Установка даты date echo Установка времени time echo Время: time /t echo Дата: date /t
    Так же для комментирования есть команда rem или ::
    :: комментарий
    или
    rem тоже комментарий
    Вы хотите покрасить текст в окне? Используйте
    color {значение}
    Значения ставятся из этой таблицы
    Для выхода из сеанса командной строки используйте команду
    exit
    но это не всё, ещё можно завершить не весь сеанс командной строки, а пакетный скрипт с аргументом /b и указать код выхода в переменной errorlevel
    exit /b {значение переменной errorlevel}

    Пачка 3 - переменные

    Переменные - неотъемлемая часть любого языка программирования, наверное, нет языков без этого, ведь без них это вряд-ли язык. Начнём с переменной %errorlevel% - это встроенная переменная которая имеет значения 1 и 0, значение 1 значит что после совершения последней операции/команды произошла ошибка, а 0 значит что ошибок нет, эта переменная перезаписывается после каждой команды которая может выдать ошибку (например takeown). Теперь научимся записывать и читать значение переменной, если взаймодействовать с переменной которой нет, то она сама создаётся, нет команды на создание переменной отдельно. Как записывать? Командой set!
    set переменная=значение
    пример:
    set primer=42
    Так же можно установить значение выражения
    set /a переменная=выражение
    пример:
    set /a primer=2+2
    Операторы:
     ( ) - группировка
    ! ~ - - унарные, для работы с одним оперантом (-5, ~5)
    * / % - + - арифметические
    << >> - логическое перемещение
    & - побитовое И
    ^ - побитовое ИЛИ
    && - логическое И
    || - логическое ИЛИ
    , - разделитель в выражении
    
    Ещё можно позволить пользователю установить значение. Эта команда работает как pause и останавливает выполнение команд до ввода.
    set /p переменная=строка, которая показывается пользователю
    пример:
    set /p answer=установите значение переменной: 
    Это основа записи переменных, теперь надо их читать:
    echo %primer%
    Переменную надо читать всегда с приставками % в начале и конце, если используете DelayedExpansion то нужно использовать ! Читать переменные можно абсолютно во ВСЕХ командах, takeown и даже сторонние программы типа FFMPEG. И так можно сделать такое:
    echo Установщик заголовка окна
    set /p title=Заголовок окна: 
    title %title%
    echo Установлен заголовок %title%
    или даже настоящие программы для пользования, например таймер сна:
    title Таймер сна
    echo Программа на установку таймера выключения ПК
    set /p timer=Введите время на выключение в секундах: 
    shutdown /s /t %timer%
    и это вся база для работы с переменными, если у вас возникают проблемы с их чтением, то используйте DelayedExpansion
    setlocal enabledelayedexpansion
    Теперь разберём IF, это команды для сравнения значения переменной с заданным числом. Чтобы выполнить отдельный код если переменная не равна заданному числу то используем ELSE (это часть команды IF и отдельно прописать её нельзя)
    set /p primer=Введите число: 
    if %primer%=="1" ( 
    echo Вы ввели 1
    ) else (
    echo Вы не ввели 1
    )
    Операторы сравнения:
    EQU/== - равенство
    NEQ - неравенство
    LSS/< - меньше
    GTR/> - больше
    LEQ - нестрогое равенство, меньше
    GEQ - нестрогое равенство, больше
    exist - наличие файла
    Так можно сделать проверку прав администратора вместе с командой
    net session
    Эта команда которая ничего не делает, но требует прав администратора, если их нет то значение %errorlevel% будет равно 1, а для получения прав администратора мы будем использовать powershell с аргументами (иначе никак)
    echo Проверка прав администратора
    net session > nul
    if %errorlevel%==0 (
    echo Есть права администратора
    ) else (
    echo Получение прав администратора
    powershell -Command "Start-Process 'cmd.exe' -ArgumentList '/c \"\"%~f0\" admin\"' -Verb RunAs"
    )
    
    Команда powershell перезапускает полностью сеанс командной строки, следовательно и скрипт.
    Если вам надо проверить наличие файла в папке вместе с BAT файлом, например для работы со сторонними программами типа FFMPEG, то можно использовать оператор EXIST
    if exist "text.txt" (
    echo Найден файл text.txt в каталоге с программой
    ) else (
    echo файл text.txt не найден в каталоге с программой
    )
    
    И на этом всё. Тут все базовые команды для начала в сфере BAT скриптов.

    Ultimate's Web с 2024, работает на дизеле.