Змінні середовища windows

змінні середовища

Змінні середовища, які використовуються в пакетних (командних) файлах, дозволяють обходитися без вказівки абсолютних шляхів для тек. Наприклад, якщо нам заздалегідь невідома буква системного диска, ми завжди можемо використовувати змінну% systemdrive%. повертає букву диска на якому встановлена ​​ОС. Також, змінні застосовуються для оптимізації коду - багаторазово повторюваного параметру (наприклад, розділ реєстру) можна призначити коротку змінну, і використовувати її. У цій статті докладно розглядаються різні прийоми роботи зі змінними, а також способи зміни і створення нових змінних. Тепер про все по порядку.

Класифікація змінних середовищ

Довідка Windows розрізняє два типи змінних середовища: системні і локальні. Системні змінні повертають однакові значення для всіх користувачів. Наприклад,% systemdrive% - буква системного диска, і вона для всіх користувачів однакова. А ось значення, які повертаються локальними змінними, варіюються в залежності від який перебуває в систему користувача. Наприклад,% userprofile% може повертати C: # 92; Documents and Settings # 92; ТекущійПользователь, де ТекущійПользователь - назва облікового запису користувача.

Використання змінних в пакетних файлах

Почнемо з простенького прикладу:

DEL / F / Q "% AllUsersProfile% # 92; Головне меню # 92; Активація Windows.lnk"
DEL / F / Q "% AllUsersProfile% # 92; Головне меню # 92; WindowsUpdate.lnk" DEL / F / Q "% systemroot% # 92; system32 # 92; *. Scr"

У всіх командах я спеціально використовував "лапки" - це не випадково - весь шлях, включаючи змінні треба брати в лапки - це потрібно робити, якщо ви використовуєте шляху, що містять пробіли. Навіть якщо сама змінна лапок не містить, після її розбору системою в дорозі можуть з'явиться прогалини (наприклад,% ProgramFiles% в C: # 92; Program Files). У будь-якому випадку лапки краще використовувати - це є хорошим тоном оформлення командних файлів.

Як задати свої змінні

Розібраний вище приклад використав уже існуючі змінні середовища. І ви, мабуть, звернули увагу на символи відсотків, навколишні назви змінних. Ці символи потрібні для того щоб дозволити підстановку значень змінної в командному рядку або в пакетному файлі. Символи відсотків вказують на те, що Cmd.exe повинен звернутися до значень змінних, а не робити посимвольного порівняння. Нижче ви побачите як це працює. Поставити свої змінні в пакетному файлі можна командою SET.

команда SET

Ви можете задати в командному файлі свої змінні за допомогою все тієї ж команди SET.

Щоб додати змінну, введіть у командному рядку:

Щоб відобразити змінну, введіть у командному рядку:

Щоб видалити змінну, введіть у командному рядку:

Важливе зауваження: змінні, що задаються командою set. діють лише протягом командної сесії, в якій вони були задані.

Ці змінні можуть бути створені, наприклад, для будь-яких шляхів, треба лише поставити або знайти алгоритм присвоєння змінної в кожній окремій ситуації, користуючись готовими прикладами або створюючи свої на їх основі. Як правило, такі змінні створюються в поточній сесії командними файлами за допомогою деяких операторів.

Приклад призначення змінних у файлі RunOnceEx.cmd. імпортуючий параметри до реєстру

@echo off
SET KEY = HKLM # 92; SOFTWARE # 92; Microsoft # 92; Windows # 92; CurrentVersion # 92; RunOnceEx
SET i = 100

REG ADD% KEY% / V TITLE / D "Installing Applications" / f

REG ADD% KEY% # 92;% i% / VE / D "WinRar 3.51" / f
REG ADD% KEY% # 92;% i% / V 1 / D "% systemdrive% # 92; install # 92; Software # 92; WinRar.exe / s" / f
REG ADD% KEY% # 92;% i% / V 2 / D "REGEDIT / S% systemdrive% # 92; install # 92; Software # 92; rar_set.reg / s" / f
SET / A i + = 1

В даному скрипті командою SET задаються дві змінних -% i% і% KEY%. Зверніть увагу, що задаються вони без символів відсотків, а ось для звернення до них %% вже потрібні. Мінлива% KEY% служить для спрощення та оптимізації коду. Вона залишається незмінною протягом поточного командної сесії, що позбавляє від необхідності кожного разу включати в код розділ реєстру. Кожен раз коли в коді зустрічається% KEY% відбуватиметься її заміна на HKLM # 92; SOFTWARE # 92; Microsoft # 92; Windows # 92; CurrentVersion # 92; RunOnceEx. А ось% i% служить для послідовної нумерації розділів реєстру. При початковому значенні 100 змінна збільшується на одиницю за допомогою команди SET / A i + = 1 після кожного блоку команд, що дає послідовність 100, 101, 102 і т.д. Таким чином, рядок

REG ADD% KEY% # 92;% i% / V 1 / D "% systemdrive% # 92; install # 92; Software # 92; WinRar.exe / s" / f

насправді відпрацює так

REG ADD HKLM # 92; SOFTWARE # 92; Microsoft # 92; Windows # 92; CurrentVersion # 92; RunOnceEx # 92; 100 / V 1 / D "C: # 92; install # 92; Software # 92; WinRar.exe / s "/ f

Зверніть увагу, що у фрагменті файлу також використовується системна змінна% systemdrive%. яка відповідає букві системного диска.

Приклад призначення змінних в командному файлі, що встановлює додаток з CD:

for %% i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %% i: # 92; WIN51 set CDROM = %% i:
start / wait "% CDROM% # 92; INSTALL # 92; DVDTools # 92; NBRom # 92; Nero.exe"

У цьому прикладі для всіх перерахованих дисків відбувається пошук певного файлу (WIN51). У разі виявлення на одному з дисків, останньому привласнюється змінна% CDROM%. а далі вже відбувається установка програмного забезпечення з використанням шляху, заданого створеної змінної.

Зміна змінних середовища і додавання власних змінних

Як вже було сказано вище, дія змінних, заданих командою set. обмежується поточної командної сесією. Якщо ви хочете отримати з тимчасової змінної системну або призначену для користувача, то треба її прописати в реєстр. Зробити це теж можна різними способами.

Утиліта setenv (завантажити).

Утиліта працює з командного рядка. Працювати з утилітою дуже просто (setenv /?).

Призначені для користувача настройки: setenv -u ім'я_змінної значення
Системні налаштування: setenv -m ім'я_змінної значення
Налаштування Default User: setenv -d ім'я_змінної значення
Налаштування поточного призначеного для користувача сеансу. setenv -v ім'я_змінної значення

Припустимо, якщо потрібно отримати змінну% temp% ще на стадії установки, то можна це зробити з cmdlines.txt, наприклад:

Creating and Setting Temp folder.
md% systemdrive% # 92; Temp
setenv -u Temp% systemdrive% # 92; Temp
setenv -u Tmp% systemdrive% # 92; Temp

Утиліта зручна тим, що після завдання змінної нею можна користуватися відразу. Ну майже відразу - в наступній командної сесії. Щоб використовувати її в поточній сесії, можна задіяти стару знайому команду set:

Creating # EgOrus # var
set EgOrus = D: # 92; EgOrus
setenv -u EgOrus% EgOrus%

Імпорт параметрів до реєстру

Якщо ж піти шляхом внесення змін до реєстру після першого входу в систему, то змінні почнуть "працювати" тільки після перезавантаження або завершення призначеного для користувача сеансу. Звичайно, в процесі автоустановки можна імпортувати бажані параметри на Т-12 і обійти цю проблему. Якщо ж ви не збираєтеся використовувати призначену змінну в поточному призначеному для користувача сеансі, то імпорт до реєстру вас теж може влаштувати. Процес імпорту REG файлів описувати повторно не буду, а розгляну команду REG ADD на конкретному прикладі.

Припустимо, ви зацікавлені мати в системі змінну% CDROM% на постійній основі і встановити її в процесі установки додатків з CD. Дотримуючись коду, наведеному вище, потрібно після визначення змінної призначити її системною.

for %% i in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do if exist %% i: # 92; WIN51 set CDROM = %% i:
REG ADD "HKEY_LOCAL_MACHINE # 92; SYSTEM # 92; CurrentControlSet # 92; Control # 92; Session Manager # 92; Environment" / v cdrom / d% CDROM% / f

Після знаходження файлу WIN51 диску, на якому він був знайдений, присвоюється локальна змінна% CDROM%. яка тут же і призначається у вигляді постійної системної змінної за допомогою імпорту в реєстр. Заодно ви дізналися, де в реєстрі зберігаються настройки системних змінних. Налаштування користувача змінних зберігаються в HKCU # 92; Environment. Шляхи, які повертаються змінними% PROGRAMFILES% і% COMMONPROGRAMFILES%, можна подивитися в параметрах ProgramFilesDir і CommonFilesDir в HKLM # 92; SOFTWARE # 92; Microsoft # 92; Windows # 92; CurrentVersion, але міняти їх там не слід. Каталоги установки програм (відмінні від% SystemDrive% # 92; Program Files) потрібно конфігурувати через файл відповідей.

Командна оболонка Windows (cmd.exe) - це досить потужний інструмент роботи з системою. За допомогою пакетних файлів можна автоматизувати неабияку кількість завдань, і саме тому вони часто використовуються для автоматичної установки Windows. Вміле використання змінних в пакетних файлах дозволяє вирішувати широкий спектр питань. Робота з командною оболонкою стає більш ефективною і одночасно спрощується код пакетних файлів. Інші приклади використання змінних ви можете знайти на сторінках сайту або форуму.

Термінологія

Командна оболонка - це окремий програмний продукт, який забезпечує прямий зв'язок між користувачем і операційною системою. Текстовий інтерфейс командного рядка надає середовище, в якому виконуються програми та службові програми з текстовим інтерфейсом.

cmd.exe - інтерпретатор команд, який командна оболонка ОС Windows використовує для перекладу введеної команди в формат, зрозумілий системі.

Командна сесія може ініціюватися як запуском cmd.exe. так і запуском пакетного файлу. Іншими словами створюється поточна командна оболонка. Відповідно вихід з цієї оболонки (наприклад, закінчення роботи пакетного файлу) завершує командну сесію.

Призначений для користувача сеанс (призначена для користувача сесія) починається з моменту входу користувача в систему (log on) і завершується при виході (log off).