Команда setlocal - зміна змінних середовища для поточного командного файлу.

Відео: Топ 7 речей Visual Studio 2017, які повинні хвилювати розробників C ++

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

Формат командного рядка:

SETLOCAL | ENABLEDELAYEDEXPANSION | DISABLEDELAYEDEXPANSION

Зміна команди SETLOCAL при включенні розширеної обробки команд:

Команда SETLOCAL приймає необов`язкові аргументи: ENABLEEXTENSIONS іліDISABLEEXTENSIONS. Це дозволяє включити або відключити розширену обработкукоманд до виконання команди. Див. CMD /? для докладного об`ясненія.ENABLEDELAYEDEXPANSION / DISABLEDELAYEDEXPANSION включає або отключаетотложенное розширення змінної середовища. Див. SET /? для докладного об`ясненія.Еті зміни діють до збігу команди ENDLOCAL, незалежно від ісходногосостоянія до виклику команди SETLOCAL.

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

VERIFY OTHER 2gt; nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Я не можу ввімкнути розширену обробку



Ця група команд працює, так як в колишніх версіях CMD.EXE команда SETLOCALне встановлює значення ERRORLEVEL. Команда VERIFY з неприпустимим аргументомнеобходіма для установки ненульового значення ERRORLEVEL.

При використанні змінних оточення в командних файлах існує певне обмеження, пов`язане з тим фактом, що привласнюється значення залишається без зміни при його модифікації всередині групи команд, що задається дужками, наприклад в командах
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)

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

Схожі
Path - відобразити або змінити шляху пошуку виконуваних файлів.Path - відобразити або змінити шляху пошуку виконуваних файлів.
Команда more - посторінковий вивід на екран консолі.Команда more - посторінковий вивід на екран консолі.
Команда move - перейменування або переміщення файлів і каталогівКоманда move - перейменування або переміщення файлів і каталогів
Команда timeout - задати період очікування.Команда timeout - задати період очікування.
Команда exit - завершити роботу командного процесора або поточного командного файлу.Команда exit - завершити роботу командного процесора або поточного командного файлу.
Команда echo - висновок тексту на екран консоліКоманда echo - висновок тексту на екран консолі
If - оператор умовного виконання команд в командних файлах windowsIf - оператор умовного виконання команд в командних файлах windows
Команда for - організація циклічної обробки результатів виконання інших команд, списків, і рядків в…Команда for - організація циклічної обробки результатів виконання інших команд, списків, і рядків в…
Break - включити або відключити обробку ctrl + c в dos.Break - включити або відключити обробку ctrl + c в dos.
Команда md (mkdir) - створити каталогКоманда md (mkdir) - створити каталог
» » Команда setlocal - зміна змінних середовища для поточного командного файлу.