Команда 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)
Поділися в соціальних мережах:
Схожі
- Title - зміна заголовка вікна командного рядка windows.
- Команда set - робота зі змінними середовища windows
- Виклик меню додаткових параметрів при завантаженні windows.
- Команда exit - завершити роботу командного процесора або поточного командного файлу.
- Команда for - організація циклічної обробки результатів виконання інших команд, списків, і рядків в…
- If - оператор умовного виконання команд в командних файлах windows
- Cmd - запуск нової копії інтерпретатора команд windows.
- Команда echo - висновок тексту на екран консолі
- Команда recover - відновлення збережених даних на пошкодженому диску.
- Команда md (mkdir) - створити каталог
- Команда timeout - задати період очікування.
- Path - відобразити або змінити шляху пошуку виконуваних файлів.
- Команда endlocal - скасування локальних змін змінних середовища для поточного командного файлу.
- Команда call
- Goto - передача управління містить мітку рядку пакетного файлу.
- Команда more - посторінковий вивід на екран консолі.
- Break - включити або відключити обробку ctrl + c в dos.
- Команда forfiles - виконання команди для групи файлів.
- Команда move - перейменування або переміщення файлів і каталогів
- Команди cd і chdir
- Команда at