Описание конфигурации
OptIn Эта установка является конфигурацией по умолчанию. В системах с процессорами, которые могут реализовать осуществленный аппаратными средствами DEP, DEP включен по умолчанию для ограниченных системных двоичных файлов и программ, которые "подписываются". При использовании этой опции только системные двоичные файлы Windows покрыты DEP по умолчанию.
OptOut DEP включен по умолчанию для всех процессов. Можно вручную создать список определенных программ, которым не применили DEP при помощи диалогового окна System в Панели управления. Профессионалы информационных технологий (IT) могут использовать Инструментарий Совместимости приложения для "уклонения" одна или несколько программ от защиты DEP. Совместимость системы фиксирует, или контейнеры, поскольку DEP действительно вступает в силу.
AlwaysOn Эта установка предоставляет полную страховую защиту DEP целой системе. Все процессы, всегда выполняемые с примененным DEP. Список исключений для освобождения определенных программ от защиты DEP не доступен. Совместимость системы фиксирует для DEP, не вступают в силу. Программы, которые отказались при помощи Инструментария Совместимости приложения, выполненного с примененным DEP.
AlwaysOff Эта установка не предоставляет страховой защиты DEP никакой части системы, независимо от аппаратных средств поддержка DEP. Процессор не работает в режиме PAE, если/PAE опция не присутствует в файле Boot.ini.
Переменные в пакетном файле по умолчанию расширены в начале выполнения сценария; необходимо использовать задержанное расширение, которое доступно с"!" разделитель:
echo Source dir is: !SOURCE_DIR!
Это только работает, если задержанное расширение включено для интерпретатора команд, который по умолчанию не является; таким образом, необходимо включить его при запуске интерпретатора, с помощью CMD.EXE /V
.
Можно также включить его с помощью этого оператора в пакетном файле:
setlocal ENABLEDELAYEDEXPANSION
Я, возможно, обработал его немного более простой...
@ECHO OFF
SET SOURCE_DIR=
IF /I [%1]==[AAA] SET SOURCE_DIR=c:\dirA
IF /I [%1]==[ZZZ] SET SOURCE_DIR=c:\dirZ
IF [%SOURCE_DIR]==[] (
ECHO "Usage: xxx <AAA|ZZZ>"
EXIT 1
)
ECHO Source dir is: %SOURCE_DIR%
Я должен признать, я немного экранирован относительно того, почему это работает, когда пример в вопросе не делает. Мое лучшее предположение - то, что это - проблема обзора. Поскольку в примере, переменный SOURCE_DIR был установлен в parens, его значении в корневом объеме, это остается неизменным. Мой сценарий изменяет SOURCE_DIR в корневом объеме.
Относительно того, почему Отложенный прием Расширения вызывает его к погрузке изменение, которое было внесено уровень объема глубже, кажется, что расширение происходит в начале каждого изменения объема. Таким образом путем задержки, Вы в основном вынуждаете это повторно расшириться после возврата корневому объему.