DelayedExpansion 变量未在 FOR 循环内扩展

DelayedExpansion 变量未在 FOR 循环内扩展

我有一个 FOR 循环,它从文件中的每一行生成一个字符串。这个想法是,对于每一行,在辅助文件中都有一个平行行,其中包含一个变量值。我在这里创建了一个循环,它回显它读取的变量,只是为了测试目的。

for %%a in (!loadstream!) do (
    set /A "linecount=!linecount!+1"
    for /F "skip=!linecount!" %%i in (save\%1\%1.sav) do (
        echo %%i
    )
)

第一个 FOR 运行正常,但其中的 FOR 不会扩展变量。相反,它保持为 !linecount! 并给出!linecount!" was not expected at this time.如果您输入,它会运行正常,%linecount%但我需要该变量在每次循环时都计数一,所以这不行。setlocal EnableDelayedExpansion当然是设置了。

每当需要加载一组特定变量时,此代码块都会在脚本中调用。我可以尝试构建一个笨拙的解决方法,但我可以看出这是可行的方法,我只是不明白出了什么问题。

答案1

似乎并cmd没有扩展选项字段中的任何内容for /f;作为一种解决方法,我尝试使用循环变量for /f "skip=%%n" ...,但这也无法扩展。

我发现的唯一解决办法就是自己跳过:-

for %%a in (!loadstream!) do (
    set /A linecount=!linecount!+1
    set lineno=0
    for /F "delims=" %%i in (save\%1\%1.sav) do (
        set /A lineno+=1
        if !lineno! == !linecount! echo i: %%i
    )
)

我添加了"delims="强制读取整行的选项,因为我正在对行中包含空格的任意文件进行测试;如果您的文件没有空格,这将不起作用,但如果您只想要每行的第一个字段,则可以省略它,以便其他字段进入%%j,等等。

相关内容