Команда set - робота зі змінними середовища windows

Відео: Змінні оточення - частина [1/2]

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

SET змінна
SET PATH - відобразити значення змінної PATH
Для створення нової змінної, або зміни значення існуючої, використовується команда:

SET змінна = рядок

змінна - Ім`я змінної середовища.
рядок - Рядок символів, що привласнюється зазначеної змінної.

SET MyName = Vasya - встановити значення змінної MyName

SET path = C: progs-% path% - змінити значення змінної PATH, додавши в початок рядка C: progs

Значення, прийняте змінної, є для обробки в командних файлах, при використанні її імені, укладеного в знаки відсотка - % . Наприклад команда видачі тексту на дисплей ECHO у вигляді:

ECHO date - виведе на екран слово "date", а команда
ECHO% date% виведе на екран значення змінної date, тобто поточну дату в форматі операційної системи.

команда SET без параметрів використовується для виведення поточних значень змінних середовища.

ALLUSERSPROFILE = C: ProgramData
APPDATA = C: Users alex AppData Roaming
CommonProgramFiles = C: Program Files Common Files
COMPUTERNAME = TEST7
ComSpec = C: windows system32 cmd.exe
FP_NO_HOST_CHECK = NO
HOMEDRIVE = C:
HOMEPATH = Users alex
LOCALAPPDATA = C: Users alex AppData Local
LOGONSERVER = TEST7
NUMBER_OF_PROCESSORS = 2
OS = Windows_NT
Path = C: windows system32-C: windows-C: windows System32 Wbem-
PATHEXT = .COM-.EXE-.BAT-.CMD-.VBS-.VBE-.JS-.JSE-.WSF-.WSH-.MSC
PROCESSOR_ARCHITECTURE = x86
PROCESSOR_IDENTIFIER = x86 Family 15 Model 3 Stepping 4, GenuineIntel
PROCESSOR_LEVEL = 15
PROCESSOR_REVISION = 0304
ProgramData = C: ProgramData
ProgramFiles = C: Program Files
PROMPT = $ P $ G
PSModulePath = C: windows system32 WindowsPowerShell v1.0 Modules
PUBLIC = C: Users Public
SystemDrive = C:
SystemRoot = C: windows
TEMP = C: Users alex AppData Local Temp
TMP = C: Users alex AppData Local Temp
USERDOMAIN = test7
USERNAME = alex
USERPROFILE = C: Users alex
windir = C: windows


Крім змінних, що відображаються в списку, при виклику команди SET, існують і інші, значення яких змінюється динамічно:

% CD% - приймає значення поточного каталогу.



% DATE% - приймає значення поточної дати.
% TIME% - приймає значення поточного часу.
% RANDOM% - значення випадкового числа в діапазоні між 0 і 32767.
% ERRORLEVEL% - поточне значення ERRORLEVEL, спеціальної змінної, яка використовується як ознака результату виконання програми.
% CMDEXTVERSION% значення версії розширеної обробки команд CMD.EXE.
% CMDCMDLINE% - розкривається в вихідну командний рядок, яка визвалакомандний процесор.

Якщо при виклику команди SET вказати тільки частина імені, то буде виведений список змінних, імена яких починаються з зазначеного рядка. наприклад:

SET U - виведе значення всіх змінних, імена яких починаються з `U`.

Команда SET підтримує два додаткових ключа:

SET / A вираз

SET / P variable = [promptString]

Ключ / A вказує, що рядок праворуч від знака рівності є чісловимвираженіем, значення якого обчислюється. Оброблювач виразів оченьпрост і підтримує такі операції, перераховані в порядку убиваніяпріорітета:

()
* /%
+ -
lt; lt; gt; gt;

^
|
= * = / =% = + = - =



= ^ = | = lt; lt; = gt; gt; =
,
- угруповання
- арифметичні оператори
- арифметичні оператори
- двійковий зрушення
- двоичное І
- двоичное виключає АБО
- двоичное АБО
- привласнення

- роздільник операторів


При використанні будь-яких логічних або довічних операторів необходімозаключіть рядок вираження в лапки. Будь-які нечислові рядки в вираженіірассматріваются як імена змінних середовища, значення яких преобразуютсяв числовий вид перед використанням. Якщо змінна з зазначеним іменемне визначена в системі, замість неї підставляється нульове значення. Етопозволяет виконувати арифметичні операції зі значеннями змінних середовища, причому не потрібно вводити знаки% для отримання значень. Якщо командаSET / A викликається з командного рядка, а не з пакетного файлу, вона виводітокончательное значення виразу. Зліва від будь-якого оператора прісваіваніядолжно стояти ім`я змінної середовища. Числові значення розглядаються какдесятічние, якщо перед ними не стоїть префікс:

0x - для шістнадцятирічних чисел
0 - для вісімкових чисел.

Приклад використання префіксів:

SET / A REZ = 0xA + 012
ECHO% REZ%


В даному командному файлі значення змінної REZ обчислюється складанням чісла10, представленого в шістнадцятковому вигляді (0xA) і числа 10, представленого в вісімковому (012).

Ключ / P дозволяє встановити значення змінної для вхідного рядка, введеннойпользователем. Показує вказане запрошення promptString перед чтеніемвведенной рядки. Запрошення promptString може бути порожнім. Даний ключ дозволяє організувати діалог з користувачем в командному файлі:@ECHO OFF
SET / P NAME = Введіть ім`я користувача:
SET / P pass = Введіть пароль:
ECHO Ім`я користувача -% NAME%, Пароль -% PASS%

У командних файлах досить часто потрібно працювати з частиною значення, прийнятого змінної, для чого використовуються підстановочні значення:змінна: рядок1 = строка2 - замінює в прийнятому значенні змінної строку1 на строку2

Наступний командний файл використовує заміну символу "точка" на символ "тире" в значенііпеременной, що відповідає поточній даті:

@ECHO OFF
set tm =% DATE%
ECHO Дата1 =% tm%
SET tm =% DATE:. = -%
ECHO Дата2 =% tm%

Для виділення частини значення, прийнятого змінної, використовується наступна конструкція:змінна: ~ x, y - де x - число пропускаються символів від початку рядка, а y - кількість символів, які використовуються в якості значення змінної.

Наступний приклад використовує відображення поточного часу без секунд і часток секунд (тільки перші 5 символів зі стандартного значення змінної TIME):

@ECHO OFF
set tm =% TIME%
ECHO время1 =% tm%
SET tm =% TIME: ~ 0,5%
ECHO час2 =% tm% Якщо значення
y (Довжина) не зазначена, то використовується залишився до кінця строкізначеніе змінної. якщо значення y негативно, то використовується частина рядка значення змінної від кінця. Попередній приклад можна змінити, вказавши, що впрінімаемом значенні часу відкидаються 6 символів від кінця:@ECHO OFF
set tm =% TIME%
ECHO время1 =% tm%
SET tm =% TIME: ~ 0, -6%
ECHO час2 =% tm% Можливе використання число пропусків не задано, і використовується негативне число, то прийняте значення буде частиною змінної від кінця рядка:% PATH: ~ -10% - витягне останні 10 символів змінної PATH

.Нульове значення можна не вказувати, зберігаючи формат підстановки:

% PATH: ~ 0, -2% еквівалентно % PATH: ~, -2%

При використанні змінних оточення в командних файлах існує певне обмеження, пов`язане з тим фактом, що привласнюється значення залишається без зміни при його модифікації всередині групи команд, що задається дужками, наприклад в командах IF або FOR . Для обходу цього обмеження використовується запуск командного процесора з параметром / V: ON і замість знаків відсотка, для отримання прийнятого змінній значення, використовуються знаки оклику. Крім того, існує можливість використовувати стандартний запуск командного процесора, але з локальним включенням даного режиму командою:

Setlocal EnableDelayedExpansion

Різниця в результатах використання значень змінних досить нагляднодемонстріруется наступним командним файлом:

Setlocal EnableDelayedExpansion
@ECHO OFF
set VAR = before
if "% VAR%" == "before" (
set VAR = after
if "! VAR!" == "after" @echo Зі знаком відсотка =% VAR%, Зі знаком питання =! VAR!
) Команда
set VAR = after виконується всередині підпрограми, ограніченнойскобкамі і, якщо прибрати команду Setlocal EnableDelayedExpansion абоне використовувати для отримання значення змінної VAR знаки оклику, її значення залишиться старим (тим, що було встановлено до входу в підпрограму). Аналогічна ж проблема спостерігається і тоді, коли значення змінної змінюється всередині циклу команди FOR.Наприклад, для отримання списку файлів поточного каталогу такий командний файл не буде працювати:

set LIST =
for %% i in (*) do set LIST =% LIST% %% i
echo% LIST%

значення змінної
LIST всередині циклу змінено не буде. Для того, щоб це відбулося, командний файл потрібно змінити наступним чином:

Setlocal EnableDelayedExpansion
set LIST =
for %% i in (*) do set LIST =! LIST! %% i
echo% LIST%
Тепер, значення змінної
LIST всередині циклу FOR будетізменяться, послідовно приймаючи значення імен файлів, разделеннихпробелом ( set LIST =! LIST! %% i)

Поділися в соціальних мережах:

Схожі
Команда more - посторінковий вивід на екран консолі.Команда more - посторінковий вивід на екран консолі.
Змінні оточення в linuxЗмінні оточення в linux
Команда append - приєднати каталог до поточногоКоманда append - приєднати каталог до поточного
Команда exit - завершити роботу командного процесора або поточного командного файлу.Команда exit - завершити роботу командного процесора або поточного командного файлу.
Команда ftype - перегляд і зміна розширень файлів і зіставлених їм додатківКоманда ftype - перегляд і зміна розширень файлів і зіставлених їм додатків
Команда find - пошук рядка символів в файліКоманда find - пошук рядка символів в файлі
Видаляємо невикористовувані драйвера в windows 7Видаляємо невикористовувані драйвера в windows 7
Команда echo - висновок тексту на екран консоліКоманда echo - висновок тексту на екран консолі
If - оператор умовного виконання команд в командних файлах windowsIf - оператор умовного виконання команд в командних файлах windows
Довідкові змінні phpДовідкові змінні php
» » Команда set - робота зі змінними середовища windows