Переменные формы %%c
действительны только в контексте цикла FOR. Они не определены или недоступны вне цикла FOR. Если вы должны получить доступ к значению за пределами цикла, передайте значение переменной окружения или аргументу CALL из цикла.
FOR переменные являются глобальными по всем циклам FOR. Обычно вы не можете получить доступ к переменным FOR из подпрограммы, которая была выбрана из цикла. Но вы можете получить доступ, создав новый цикл FOR.
Использование нормального расширения %A%
в пределах цикла (в любом блоке круглых скобок) не может получить доступ к новому значению, установленному в том же блоке. Вместо этого следует использовать отложенное расширение !A!
. Задержка расширение должно быть включено через setlocal enableDelayedExpansion
@echo off
setlocal enableDelayedExpansion
set "A=Old Value"
for /f "delims=" %%A in ("Loop Value") do (
echo Value within loop: %%A
set "A=%%A"
echo Value of %%A%% within loop: %A%
echo Value of ^^!A^^! within loop: !A!
call :sub "%%A"
)
for %%X in (dummy) do echo Value within X loop after A loop over: %%A
echo Value of %%A%% persists: %A%
exit /b
:sub
echo Value outside of loop: %%A
echo value of %%A%%: %A%
echo Value of %%A%% within subroutine: %A%
echo Value of ^^!A^^! within subroutine: !A!
echo value of %%~1: %~1
for %%X in (dummy) do echo Value within X loop while in subroutine: %%A
exit /b
--OUTPUT--
Value within loop: Loop Value
Value of Loop Value% within loop: Old Value
Value of !A! within loop: Loop Value
Value outside of loop: %A
value of %A%: Loop Value
Value of %A% within subroutine: Loop Value
Value of !A! within subroutine: Loop Value
value of %~1: Loop Value
Value within X loop while in subroutine: Loop Value
Value within X loop after A loop over: %A
Value of %A% persists: Loop Value
Вы должны показать, что вы пробовали это не удается, и описать результат, который вы хотите. – dbenham
Если вам нужно значение в параметре 'for' replaceable из команды' for', сохраните его в переменной 'set 'value = %% c" ' –
@MCND: Это не работает – user212051