Змінні в командному рядку CMD: синтаксис оголошення, виклику та приклади застосування
Змінні – найважливіший інструмент у програмуванні. Вони дозволяють зберігати дані, посилатися на них на ім'я та змінювати значення. Змінні особливо корисні у командному рядку CMD для автоматизації рутинних завдань. Давайте розберемося, як правильно оголошувати, викликати та використовувати змінні в CMD!
Що таке змінні в CMD
Змінна програмування - це іменована область пам'яті для зберігання даних. Змінна містить певне значення, якого можна звернутися по заданому імені.
Наприклад, можна оголосити змінну з ім'ям path і присвоїти їй значення "C:\Windows" . Після цього, звертаючись до path , ми отримуватимемо рядок "C:\Windows" .
Змінні корисні, коли потрібно:
- Повторно використовувати те саме значення в різних місцях програми, не дублюючи його. Достатньо послатися на ім'я змінної.
- Змінювати значення "на льоту" в одному місці програми, щоб воно автоматично оновилося в інших місцях.
- Зберігати складні дані: рядки, числа, масиви, об'єкти.
Змінні можуть мати локальну чи глобальну область видимості. Локальні доступні лише всередині кодового блоку, де оголошені. Глобальні – у будь-якому місці програми.
У командному рядку CMD є два види змінних:
- Системні (оточення). Це вбудовані змінні CMD, такі як %PATH%, %TEMP% та ін.
- Користувальницькі. Їх можна створити командою SET у пакетних файлах або прямо в CMD.
Змінні користувачі зручно застосовувати для:
- Зберігання шляхів, що часто використовуються, до файлів і каталогів.
- Передача параметрів між пакетними файлами.
- Лічильників та прапорів у програмній логіці.
Як оголосити змінну в CMD
Щоб створити змінну користувача в CMD, використовується команда SET . Її синтаксис:
SET ім'я_змінної = значення
Наприклад, створимо змінну name зі значенням "John":
При оголошенні змінної CMD потрібно враховувати:
- Регістр імені не важливий, Name і name - те саме.
- В імені можна використовувати літери, цифри та символ підкреслення _ .
- Розділові знаки, пробіли та інші символи в імені заборонені.
Змінній можна присвоїти число, рядок, шлях до файлу та інші значення. Числа задаються як є, рядки беруться в лапки:
SET counter=100 SET path="C:\Windows"
Якщо рядок містить спеціальні символи, їх потрібно екранувати за допомогою ^ . Наприклад, щоб задати шлях C: My Files , пишемо:
SET mypath="C:\My^ Files\"
За один раз можна оголосити кілька змінних, розділяючи команди SET через крапку з комою:
SET name=John; SET age = 30; SET married=false
Щоб очистити значення змінної, присвоїти їй порожній рядок:
Щоб повністю видалити змінну з середовища CMD, просто викликати SET ім'я_змінної без значення:
Виклик та використання змінних у CMD
Щоб отримати значення змінної в CMD, потрібно обернути її ім'я на знаки відсотка: %ім'я_змінної%
Наприклад, виведемо наше ім'я:
Змінні можна комбінувати з рядками та іншими змінними через конкатенацію. Це дозволяє створювати рядки "на льоту":
ECHO Мене звуть %name%. Мені %age% років. ECHO Шлях до файлу: C:\Users\%username%\Documents\%filename%.txt
Змінні зручно використовувати в командах CMD, пакетних файлах, циклах та умовах:
MKDIR "%userprofile%\%foldername%" IF %number% GTR 10 ECHO Більше 10 FOR /L %%I IN (1,1,%count%) DO ECHO %%I
Також їх можна передавати як параметри з одного пакетного файлу до іншого:
script1.bat: SET username=John CALL script2.bat script2.bat: ECHO Привіт %username%!
На відміну від багатьох мов програмування, CMD змінні мають тільки рядковий тип. Але їх можна перетворювати на числа для обчислень.
Загалом змінні CMD – потужний інструмент для гнучкого налаштування та автоматизації скриптів.
Системні змінні оточення в CMD
Крім користувацьких змінних, CMD є зумовлені системні змінні оточення. Вони вже оголошені в системі та містять корисну інформацію.
Наприклад, змінна %PATH% зберігає список каталогів, де CMD шукає файли, що виконуються. А %TEMP% вказує шлях для тимчасових файлів.
Список основних системних змінних у Windows:
- %APPDATA% - папка з даними програм користувача
- %HOMEPATH% - каталог профілю користувача
- %LOCALAPPDATA% - каталог для локальних даних додатків
- %PROGRAMFILES% - каталог із програмами
- %TEMP% або %TMP% - каталог для тимчасових файлів
- %WINDIR% - каталог Windows
Щоб переглянути або змінити змінні оточення, потрібно зайти у властивості системи. Але краще не змінювати системні змінні без потреби.
У пакетних файлах CMD оточення можна використовувати так само, як і змінні користувача - через %ім'я% . Наприклад:
MKDIR "%TEMP%\mytemp" COPY file.txt "%HOMEPATH%\Documents"
При цьому варто бути обережним із критичними для системи оточеннями на кшталт %PATH% або %WINDIR% . Краще ізолювати будь-які зміни, що їх зачіпають, в окремий блок SETLOCAL . ENDLOCAL.
Область видимості змінних CMD
За замовчуванням змінні в CMD є глобальними та доступними в будь-якому місці сесії після оголошення.
Але часто потрібно локалізувати зміни змінних, щоб вони не впливали на решту скриптів. Для цього використовуються блоки:
SETLOCAL SET var=value // тут var доступна ENDLOCAL
Усередині цих блоків змінні недоступні ззовні. Це дозволяє:
- Ізолювати критичні зміни оточення, наприклад, тимчасова зміна %PATH%
- Передавати змінні між підпрограмами без конфліктів
- Використовувати змінні в циклах, не торкаючись решти коду
Приклад передачі змінної name з одного скрипта до іншого:
script1.bat: SETLOCAL SET name=John CALL script2.bat ENDLOCAL script2.bat: ECHO %name%
Передача аргументів у змінні CMD
CMD має спеціальні змінні для читання аргументів скрипта з командного рядка:
- %0 - ім'я скрипта
- %1 - перший аргумент
- %2 - другий аргумент
- і т.д. до %9
Це дозволяє зробити скрипт гнучкішим, передаючи в нього дані ззовні. Наприклад, пакетний файл із копіюванням:
copy.bat file.txt C:\Temp\
Також аргументи можна перебрати в циклі FOR для обробки довільної кількості:
@ECHO OFF FOR %%G IN (%*) DO ECHO %%G
Передача аргументів між скриптами – потужний прийом для гнучкого настроювання поведінки.
Арифметика та рядки в змінних CMD
Хоча змінні CMD мають рядковий тип, можна робити арифметичні операції.
Для цього використовується ключ /A в SET:
SET /A var=1+2 ECHO %var%
Підтримуються операції +, -, *, / та %. Також для роботи з рядками є функції:
- SUBSTR - витягти підрядок
- FINDSTR - знайти підрядок
- REPLACE - замінити підрядок
SET string=Hello world! ECHO %string:~0,5% > Hello SET modified=%string:world=universe% ECHO %modified% > Hello universe!
Комбінуючи рядки та числа у змінних, можна вирішувати різні завдання.
Рекомендації щодо використання змінних у CMD
Щоб ефективно застосовувати змінні у скриптах CMD, рекомендується:
- Дотримуватись угод про іменування.Наприклад, константи - великими літерами, локальні змінні - з префіксом.
- Уникати конфліктів із системними іменами. Не перевизначати критичні оточення на кшталт %PATH%.
- Обмежувати область видимості потенційно небезпечних змін блоками SETLOCAL. ENDLOCAL.
- Давати змінним імена, що "говорять", що відображають їх призначення.
Для складних даних краще використовувати зовнішні файли, ніж змінні. Наприклад, списки шляхів можна зберігати у текстовому файлі.
При роботі з введенням користувача бажано перевіряти дані на валідність. Наприклад, приводити до числа і перевіряти діапазон.
Хороший підхід - використовувати змінні для настроювання поведінки скриптів. Наприклад, увімкнути/вимкнути режим налагодження:
SET debug=true IF %debug%==true ECHO Увімкнено режим налагодження
Так скрипти стають гнучкішими і параметризовані.
Приклади використання змінних CMD
Розглянемо кілька прикладів реального застосування змінних у скриптах CMD:
- Зберігання часто використовуваних шляхів - до каталогів проекту, конфіг і т.д.
- Передача налаштувань між скриптами – налагодження, режим виконання, опції.
- Генерація імен файлів та каталогів на льоту за шаблонами.
- Лічильники та прапори в циклах – для підрахунку ітерацій, переривання.
- Читання аргументів скрипта - для гнучкого настроювання дій.
В цілому, змінні CMD при грамотному використанні - потужний інструмент для створення гнучких скриптів, що настроюються.
Змінні у пакетних файлах
Розглянемо деякі прийоми використання змінних безпосередньо у пакетних файлах CMD:
- Оголошення на початку – зручно зібрати всі змінні в одному місці.
- Локальні блоки у функціях – щоб не конфліктувати з глобальними змінними.
- Передача параметрів через змінні у дзвінках CALL.
- Умови IF на змінних значеннях для розгалуження коду.
- Використання у командах - підстановка шляхів, опцій тощо.
Навіть у невеликих скриптах варто використовувати хоча б пару змінних для більшої гнучкості.
Особливості змінних CMD
При роботі зі змінними CMD варто враховувати деякі особливості:
- Лише рядковий тип даних, хоча є можливості для обчислень.
- Немає строгої типізації - рядки та числа конвертуються автоматично.
- Область видимості за умовчанням є глобальною, потрібно явно обмежувати.
- Конфлікти імен із системними змінними.
- CMD автоматично розкриває змінні усередині рядків.
З огляду на ці нюанси можна ефективно застосовувати змінні в пакетних файлах CMD.
Управління змінними оточення Windows у PowerShell
За допомогою PowerShell ви можете отримувати, додавати, видаляти або змінювати значення змінних оточення (середовища). У змінних оточення Windows зберігає різну користувальницьку та системну інформацію (найчастіше це шляхи до системних та тимчасових папок), яка використовується операційною системою та додатками, встановленими на комп'ютері.
У Windows є кілька типів змінних оточення:
Змінні оточення процесу - створюються динамічно і доступні тільки в поточному запущеному процес
Типи змінних оточення Windows вказані як зменшення пріоритету. Тобто. значення змінної оточення %TEMP% у профілі користувача матиме більший пріоритет, ніж значення системної змінної оточення %TEMP%.
Для керування змінними оточеннями зазвичай використовується вкладка Advanced у властивостях системи. Щоб відкрити System Properties, виконайте команду SystemPropertiesAdvanced та натисніть кнопку Environment Variable.
У цьому вікні можна створити та редагувати змінні середовища для поточного користувача або системні змінні оточення.
Щоб вивести повний список змінних оточення та їх значення PowerShell, виконайте команду:
Як ви бачите, для доступу до змінних оточення PowerShell використовується окремий віртуальний диск Env:доступний через провайдер Environment.
Отримати значення певної змінної оточення Path:
Т.к. Змінні оточення, по суті, це файли на віртуальному диску, натисканням кнопки TAB можна використовувати автозавершення для набору імені змінної оточення.
Щоб розбити значення змінної оточення на рядки, виконайте:
(Get-ChildItem env:Path). value -split ";"
Додати значення в змінну оточення Path:
Однак це додає тимчасове значення в змінну оточення Path. При наступному перезавантаженні нове значення змінної буде скинуто. Щоб додати постійне значення до системної змінної оточення, використовується така конструкція:
$path = [System.Environment]::GetEnvironmentVariable("Path","Machine")
[System.Environment]::SetEnvironmentVariable("Path", $path + ";C:\tools", "Machine")
[System.Environment]::GetEnvironmentVariable("Path","Machine") -Split ";"
Щоб змінити користувацьку змінну оточення, замініть у попередніх командах область Machine на User.
Незважаючи на те, що фактично змінні оточення та їх значення зберігаються у реєстрі, пряма зміна їх значень у реєстрі використовується рідко. Причина в тому, що поточний процес під час запуску зчитує значення змінних оточення з реєстру. Якщо ви зміните їх, процес не буде повідомлено про це.
Якщо потрібно з PowerShell змінити в реєстрі значення змінної оточення, використовуються команди:
$variable = Get-ItemPropertyValue -Path 'HKCU:\Environment\' -Name 'Path'
$add_path = $variable + ';C:\Git\'
Set-ItemProperty -Path 'HKCU:\Environment\' -Name 'Path' -Value $add_path
Ви можете створити локальну змінну оточення. За умовчанням така змінна оточення буде доступна лише у поточному процесі (PowerShell), з якого вона створена. Після того, як процес буде закрито – змінна оточення буде видалена.
$env:SiteName = 'winitpro.ru'
Get-ChildItem Env:SiteName
Якщо потрібно створити глобальну системну змінну (потрібні права адміністратора), використовуйте команду:
Очистити та видалити глобальну змінну оточення:
[Environment]::SetEnvironmentVariable('siteName', $null, "Machine")