Пакетное замедленное расширение не работает
Хорошо, я схожу с ума, и я не знаю, что еще делать, я попробовал несколько вещей, и ничего не работает.
Посмотрите на этот пример кода (test.cmd):
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
Это сгенерированный вывод:
D:\>ver
Microsoft Windows [Version 6.1.7600]
D:\>test.cmd
D:\>setlocal enabledelayedexpansion enableextensions
D:\>set VAR=before
D:\>if "before" == "before" (
set VAR=after;
if "before" == "after"
)
D:\>
Я делаю что-то неправильно?
Это всего лишь тест, код, который мне нужен, тоже использует переменные и требует отложенного расширения, но этот простой тест тоже не работает, другой тоже не сработает (я пытался, я закончил с простым примером, чтобы проверить, работает ли он).
РЕДАКТИРОВАТЬ: новый код и вывод:
test.cmd:
@echo off
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "!VAR!" == "after" (
echo It worked.
) else (
echo It didn't work.
)
)
Выход:
D:\>test.cmd
It didn't work.
D:\>
4 ответа
Вы должны использовать !var!
для отложенного расширения. %var%
всегда расширяется на этапе разбора.
Т.е. измени свой код на
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
В начале командной строки cmd необходимо ввести "CMD /V" ИЛИ "CMD /V:ON"
После этого тестирования код должен работать
SETLOCAL EnableDelayedExpansion
Set "_var=first"
Set "_var=second" & Echo %_var% !_var!
Не используйте ==, в пакете вы должны использовать EQU
Например напишите:
if %bla% EQU %blub% echo same