Змінні середовища 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).