Когда пакетный файл выполняется, строки/блоки обрабатываются, выполняются, и процесс продолжается в следующей строке/блоке. Когда парсер достигает строки или блока кода, все ссылки %variable%
заменяются значением внутри переменной до, начиная с выполнения кода. Таким образом, если вы измените значение переменной внутри блока кода, это новое значение не будет доступно изнутри одного и того же блока кода: операция чтения для переменной не существует, она была заменена значением внутри переменной.
Вам необходимо включить замедленное расширение и, при необходимости, изменить синтаксис, чтобы получить доступ к значению в переменной от %var%
до !var!
. Это указывает парсеру, что операция чтения должна быть отложена до выполнения операции чтения.
@echo off
setlocal enabledelayedexpansion
set a=1
set b=2
cd d:\
if %a% equ 1 (
set a=%b%
set b=5
echo in a: !a!
echo in b: !b!
)
echo out a: %a%
echo out b: %b%
pause
exit /b