Использование "setlocal enabledelayedexpansion" в командной строке



Работает ли setlocal enabledelayedexpansion только в пакетном файле? Как setlocal enabledelayedexpansion можно использовать в командной строке?

542   2  

2 ответов:

Вы можете включить отложенное расширение в командной строке с помощью команды cmd /V:ON

Из cmd /?:

/V:ON   Enable delayed environment variable expansion using ! as the
        delimiter. For example, /V:ON would allow !var! to expand the
        variable var at execution time.  The var syntax expands variables
        at input time, which is quite a different thing when inside of a FOR
        loop.

Узнайте на примере: Copy&Paste из моего окна CMD:

==>echo !os! %pp%
!os! %pp%

==>cmd /E:ON /V:ON /K set "pp=yy" & set pp & echo !os! !pp!

==>echo !os! %pp%
Windows_NT yy

==>exit
Environment variable pp  not defined
!os! !pp!

==>cmd /E:ON /V:ON /K set "pp=yy" ^& set pp ^& echo !os! !pp!
pp=yy
Windows_NT yy

==>echo !os! %pp%
Windows_NT yy

==>exit

==>echo !os! %pp%
!os! %pp%

==>

Пояснение:

  • echo !os! %pp% возвращает !os! %pp% отображение отложенного расширения отключено и pp переменная не определена в текущем CLI;
  • cmd /E:ON /V:ON /K set "pp=yy" & set pp & echo !os! !pp! ничего не возвращает, новый экземпляр интерпретатора команд Windows имеет отложенное расширение включено (см. echo !os! %pp% Вывод);
  • exit возвращает результат set pp & echo !os! !pp! в Родительском экземпляре CLI: Environment variable pp not defined и !os! !pp!;
  • cmd /E:ON /V:ON /K set "pp=yy" ^& set pp ^& echo !os! !pp! возвращает pp=yy и Windows_NT yy в новом CLI экземпляр (обратите внимание, что все & экранированы ^);
  • echo !os! %pp% возвращает Windows_NT yy в новом экземпляре CLI (он показывает отложенное расширение enabled и pp переменную defined в дочернем CLI);
  • exit к родительскому экземпляру CLI;
  • echo !os! %pp% возвращает !os! %pp% снова.

Comments

    Ничего не найдено.