For loop 变量未在嵌套for循环中设置-Windows批处理

For loop 变量未在嵌套for循环中设置-Windows批处理,for-loop,batch-file,windows-scripting,For Loop,Batch File,Windows Scripting,下面是我的代码的简化片段: @echo off setlocal enabledelayedexpansion for /f %%f in ('%pomFiles%') do ( findstr "var" %%f > nul if errorlevel 0 if not errorlevel 1 ( cd "%%~dpf" for /f "usebackq" %%i in ('%%~dpftr

下面是我的代码的简化片段:

@echo off    
setlocal enabledelayedexpansion
    for /f %%f in ('%pomFiles%') do (
        findstr "var" %%f > nul
        if errorlevel 0 if not errorlevel 1 (
            cd "%%~dpf"
            for /f "usebackq" %%i in ('%%~dpftree.out') do ( set size=%%~zi && echo !size!)
            if !size! gtr 0 (
                   //do  stuff
            )
        )
    )

!尺寸变量似乎未设置。如果我做了
echo!尺寸,它将打印
!尺寸。如何确保
!尺寸计算?

这是因为您正在为/f
使用
,即读取文件的内容,因此问题是您试图获取变量
%%i
的大小,该变量设置为文件中的第一行

您只需要为
循环创建一个常规的

for %%i in ("%%~dpftree.out") do ( set size=%%~zi && echo !size!)
if !size! gtr 0 (
    //do  stuff
)

可能重复的更好的方法是在您开始讨论问题时编辑您的原始问题,而不是发布一个全新的问题。@Vicky,由于您的建议,我已修复了命令打印问题,如果您发布,我会将其标记为答案。不过我觉得这是一个完全不同的问题…谢谢你的建议,但是即使有了这个代码更改,它似乎还是打印出来了
!尺寸而不是值。如果我写
echo%%~zi
大小不打印…嗯,你启用了延迟扩展,不是吗?我知道这在你的例子中,但听起来好像你没有。我刚刚测试了它,它对我来说运行良好?是的,它是第一个for循环之前的第一行,如我的示例所示。这应该也可以为内部循环启用延迟扩展,对吗?考虑到您提出的新for语句,将
if!尺寸!全球技术法规0
位于for循环和更改的主体中
!尺寸用于
%%~zi
?这个循环每次只运行一次,对吗?是的,只要它在那里,它就应该工作。从理论上说,是的,这应该可以很好地工作,但不要首先将其分配给
大小。