Setlocal enabledelayedexpansion что это
Setlocal
Начало области задания для определения переменных среды в пакетном файле. Локальное окружение используется до тех пор, пока не встретится команда endlocal или не будет достигнут конец пакетного файла.
Синтаксис
setlocal <enableextension | disableextensions>
<enabledelayedexpansion | disabledelayedexpansion>
Аргументы
Примечания
Команда setlocal не выполняется при использовании вне сценария или пакетного файла.
Используйте команду setlocal для изменения переменных среды при выполнении пакетного файла. Изменения среды, выполненные после setlocal, являются локальными для пакетного файла. Cmd.exe восстанавливает первоначальные параметры при обнаружении команды endlocal или достижении конца пакетного файла.
Команда setlocal устанавливает переменную ERRORLEVEL. При выполнении аргументов <enableextension | disableextensions> или <enabledelayedexpansion | disabledelayedexpansion> переменная ERRORLEVEL имеет значение ноль (0). В противном случае ее значение 1. Этим можно воспользоваться в пакетных программах для проверки доступности расширений командного процессора, например:
Так как команда cmd не устанавливает значение переменной ERRORLEVEL, когда расширения командного процессора отключены, команда verify устанавливает переменную ERRORLEVEL в ненулевое значение при использовании этой команды с недопустимым аргументом. Если используется команда setlocal с аргументами <enableextension | disableextensions> или <enabledelayedexpansion | disabledelayedexpansion> и значение переменной ERRORLEVEL не 1, расширения командного процессора недоступны.
Дополнительные сведения о расширениях командного процессора смотрите в разделе cmd.
Примеры
Локальное изменение переменных среды в пакетном файле может быть использовано следующим образом:
SetLocal и расширенная обработка команд в Windows Batch [Статья]
SetLocal и расширенная обработка команд
По своей сути она состоит из 3 совмещенных частей:
По-умолчанию, значение переменной при инициализации
для строкового типа = пустой строке,
для числового типа = 0.
Типы переменных.
Область видимости переменной, заданной командой Set, является текущая среда интерпретатора, если батник запущен через нее (CMD.exe) (и внутри нет команды локализации SetLocal), или сессия самого батника, если двойным кликом по нему.
Позволяет обнулить переменную B, при этом в однострочной команде после EndLocal
переменная раскрываемая через % и все еще будет содержать старое значение, поэтому может быть «переброшена» через локаль.
В конструкции вида:
Что делает?
Позволяет использовать дополнительные ключи встроенных команд.
Где используется?
Откройте справку по командам, например,
For /?
Set /?
Там в первых 10 строках найдете выражение:
«Если включена расширенная обработка команд. то можно использовать еще и такие ключи. »
chdir /?
«Если включена расширенная обработка команд. в таком случае поведение команды изменяется» (касается пробелов в пути).
.
Как включается?
1) Задается командой
2) Через реестр (выше по ссылкам).
3) Через ключи CMD.exe, если бат-файл или команда запускается через него, а не напрямую.
Метод может использоваться в однострочных командах, а также методах Shell других ЯП.
Пример:
где под Commands подразумевается путь и имя к командному файлу (bat, cmd), цикл, команда, или перечень команд, составленных по правилам формирования однострочных команд Batch.
Может быть отключена командой:
Практическая польза от отключения, как мне известно, никакой.
Если Вы измените значение переменной внутри конструкции,
раскрывая переменную через %, Вы получите ее старое значение (присвоенное до входа в эту конструкцию).
Как включить возможность использовать (!):
По-умолчанию, данный режим выключен.
Включить можно:
1) командой:
3) запуском batch-файла или команд(ы) через специальный ключ CMD.exe:
Пример:
где под Commands подразумевается путь и имя к командному файлу (bat, cmd), цикл, команда, или перечень команд, составленных по правилам формирования однострочных команд Batch.
setlocal
Начинает локализацию переменных среды в пакетном файле. Локализация продолжится до тех пор, пока не встретится совпадающая команда endlocal или не будет достигнут конец пакетного файла.
Синтаксис
Параметры
Комментарии
Если вы используете setlocal вне сценария или пакетного файла, он не оказывает никакого влияния.
В пакетной программе можно использовать несколько команд setlocal или endlocal (т. е. вложенные команды).
Команда setlocal задает переменную ERRORLEVEL. При передаче <енабликстенсионс дисабликстенсионс> или <енабледелайедекспансион дисабледелайедекспансион> переменной ERRORLEVEL присваивается значение 0 (ноль). В противном случае устанавливается значение 1. Эти сведения можно использовать в пакетных скриптах, чтобы определить, доступны ли расширения, как показано в следующем примере:
Поскольку при отключенных расширениях команд cmd не устанавливает переменную ERRORLEVEL, команда Verify ИНИЦИАЛИЗИРУет значение переменной ERRORLEVEL ненулевым значением при его использовании с недопустимым аргументом. Кроме того, если вы используете команду setlocal с аргументами <енабликстенсионс дисабликстенсионс> или <енабледелайедекспансион дисабледелайедекспансион> и не устанавливаете переменную ERRORLEVEL в значение 1, расширения команд недоступны.
Примеры
Для локализации переменных среды в пакетном файле используйте следующий пример скрипта:
Setlocal enabledelayedexpansion что это
Начало области задания для определения переменных среды в пакетном файле. Локальное окружение используется до тех пор, пока не встретится команда endlocalили не будет достигнут конец пакетного файла.
Синтаксис
setlocal <enableextension | disableextensions>
<enabledelayedexpansion | disabledelayedexpansion>
Аргументы
Примечания
Команда setlocal не выполняется при использовании вне сценария или пакетного файла.
Используйте команду setlocal для изменения переменных среды при выполнении пакетного файла. Изменения среды, выполненные после setlocal, являются локальными для пакетного файла. Cmd.exe восстанавливает первоначальные параметры при обнаружении команды endlocal или достижении конца пакетного файла.
Команда setlocal устанавливает переменную ERRORLEVEL. При выполнении аргументов <enableextension | disableextensions> или <enabledelayedexpansion |disabledelayedexpansion> переменная ERRORLEVEL имеет значение ноль (0). В противном случае ее значение 1. Этим можно воспользоваться в пакетных программах для проверки доступности расширений командного процессора, например:
Так как команда cmd не устанавливает значение переменной ERRORLEVEL, когда расширения командного процессора отключены, команда verifyустанавливает переменную ERRORLEVEL в ненулевое значение при использовании этой команды с недопустимым аргументом. Если используется команда setlocal с аргументами <enableextension | disableextensions> или <enabledelayedexpansion | disabledelayedexpansion> и значение переменной ERRORLEVEL не 1, расширения командного процессора недоступны.
Дополнительные сведения о расширениях командного процессора смотрите в разделе cmd.
Примеры
Локальное изменение переменных среды в пакетном файле может быть использовано следующим образом:
    Команда 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 2>nul
SETLOCAL ENABLEEXTENSIONS
IF ERRORLEVEL 1 echo Не удается включить расширенную обработку
Эта группа команд работает, так как в прежних версиях CMD.EXE команда SETLOCAL не устанавливает значение ERRORLEVEL. Команда VERIFY с недопустимым аргументом необходима для установки ненулевого значения ERRORLEVEL.
Разница в результатах использования значений переменных довольно наглядно демонстрируется следующим командным файлом:
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 )