Различное поведение с отложенным расширением переменной в пакетном скрипте в 2 одинаковых частях кода
@echo off
pushd
setlocal enabledelayedexpansion enableextensions
set VARY=before
if "!VARY!" == "before" (
set VARY=2
if "!VARY!" == "2" @echo If you see this, yes echo !VARY!
)
set VAR=before
if "!VAR!" == "before" (
set VAR=1
if "!VAR!" == "1" @echo If you see this, it worked
)
popd
Ожидаемый результат:
Если вы видите это, да 2
Если вы видите это, это сработало
Фактический выход:
Если вы видите это, это сработало
Может кто-нибудь объяснить, почему в выводе также не отображается "Если вы видите это, да 2"?
2 ответа
Решение
У вас есть пробелы после 2
так что сравни if "2 " == "2"
(не равный).
Чтобы избежать этого, используйте следующий код:
установить "VARY = before" если "! VARY!" == "до" (установить "VARY = 2" if "! VARY!" == "2" echo Если вы видите это, да echo!VARY!)
.. и если вы устанавливаете числа, вы также можете использовать "set /a":
установить "VARY = before" если "! VARY!" == "до" ( set /a VARY=2 if "!VARY!"=="2" echo Если вы видите это, да echo!VARY!)
Это просто. Первый раз, когда вы установите VARY
в 2
вместо 2
,
Чтобы избежать этого, используйте ВСЕГДА синтаксис set "VARY=2"
Этот синтаксис принимает только ввод от первой до последней кавычки, все символы после последней кавычки отбрасываются.