Различное поведение с отложенным расширением переменной в пакетном скрипте в 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"

Этот синтаксис принимает только ввод от первой до последней кавычки, все символы после последней кавычки отбрасываются.

Другие вопросы по тегам