尽管启用了 EnableDelayedExpansion,但未在 for 循环中分配变量

variable is not assigned in for loop despite EnableDelayedExpansion

我有以下批处理脚本,可以动态生成文件名。不幸的是,我无法获得将 return 值分配给 filename 的函数。每个 echo return 都是一个空行。

@echo off
setlocal EnableDelayedExpansion

for /l %%i in (0,1,1) do (
    call :create_filename %%i filename
    echo(!%filename%!
)
pause

:create_filename
    set "base=My test file"
    if %1 GTR 0 set "base=%base% (%1)"
    set "%~2=%base%.txt"
GOTO :eof

使用延迟变量需要您使用 !Var! 语法而不是 %Var% 语法来引用它们。 %Var% 在读取时保持扩展。 !Var! 在执行时展开。 Set DelayedExpansion 刚刚打开对 !Var! 的支持。