Ответ 1
Вам нужно использовать опцию с задержкой расширения cmd.exe.
В верхней части вашего script, поставьте:
setlocal enableextensions enabledelayedexpansion
а затем поместите:
endlocal
внизу.
Затем вам нужно использовать !Run!
вместо %Run%
.
Причина, по которой ваш код не работает, заключается в том, что весь запрос FOR (включая команды внутри него) оценивается при его обнаружении. То, что расширяется переменная %Run%
.
Используя отложенное расширение, вы не расширяете их до тех пор, пока они не понадобятся (после того, как вы установите их в блоке).
Вы можете увидеть разницу в этом script:
@echo off
setlocal enableextensions enabledelayedexpansion
set xx=0
for %%i in (a b c d) do (
echo %%i
set /a "xx = xx + 1"
if %xx%==3 echo yes for normal
if !xx!==3 echo yes for delayed
)
endlocal
который выводит:
a
b
c
yes for delayed
d
Вы заметите, что проверка с помощью %xx%
не работает, потому что она была оценена при запуске оператора for
(и xx
равно 0). Отсроченное расширение !xx!
действительно работает, поскольку каждый раз проверяется через цикл.