Очевидное вы думаете, что выход будет «после», учитывая, что мы перезапускаем переменную env внутри цикла.
Но выход будет фактически «до». Причина в том, что подстановка переменных выполняется в .bat-файлах интерпретатором при чтении команды, а не при ее выполнении. Таким образом, для составного оператора переменные в теле оцениваются, когда оператор if встречается впервые.
Вы можете сделать эту работу, используя расширенное расширение переменной среды (необходимо включить ее). Если он включен, вы можете сделать:
набор VAR = перед тем
если "% VAR%" == "перед" (
набор VAR = после;
эхо вар!
)
Вы можете включить отложенное расширение переменных среды, используя параметр/v при запуске cmd.exe.
[Backstory - многие из нас по-прежнему используют устаревшие .bat-файлы для управления такими вещами, как make-процедуры и т. Д. Очевидно, что есть более эффективные инструменты для написания сценариев, но не всегда возможность их использовать. Я столкнулся с этим вопросом некоторое время назад и недавно нашел двух других людей, которые вытащили свои волосы за одно и то же. Поэтому полезно понять, как интерпретатор выполняет замену переменных].