Я не уверен, в чем ваша проблема, так как это прекрасно работает:
@setlocal enableextensions enabledelayedexpansion
@echo off
set name=ORIGNAME
for %%i in (1 2) do (
call :function1 %%i
echo in main %name% !name!
)
endlocal
goto :eof
:function1:
setlocal enableextensions enabledelayedexpansion
set name1=%1_blabla
endlocal & SET name=%name1%
echo in function %name%
goto :eof
Вывод:
in function 1_blabla
in main ORIGNAME 1_blabla
in function 2_blabla
in main ORIGNAME 2_blabla
Вы уверены , что, когда вы использовали name
в основных областях, вы использовали !name!
вместо %name%
?
Если вы используете вариант %name%
, он будет оцениваться при считывании всего цикла for
, а не во время его использования (другими словами, он будет пустым). Вы можете видеть это в выводе ORIGNAME
в строке main
.
Я не уверен, что это так, поскольку вы используете отложенное расширение. Но, на всякий случай, я думал, что упомяну это. Я всегда использую отложенное расширение, а я всегда использовал !
варианты переменных среды, так как это более точно соответствует ожидаемой работе оболочки.
В любом случае, приведенный мною код работает нормально, так что вы можете поиграть с ним, чтобы посмотреть, сможете ли вы включить его в свой собственный.