Переменные - неотъемлемая часть любого языка программирования,
наверное, нет языков без этого, ведь без них это вряд-ли язык.
Начнём с переменной %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 скриптов.