For loop WMIC lastmodified包含在for循环中

For loop WMIC lastmodified包含在for循环中,for-loop,batch-file,wmic,last-modified,For Loop,Batch File,Wmic,Last Modified,我正在尝试获取文件的最新修改日期,这些文件几乎具有相同的名称(CompactReg00的共同点) 我希望这个日期对不同的日期设置是安全的,所以我想使用wmic命令。 如果我这样使用该命令,该命令会很好地工作: set filename=CompactReg00_20200504T112430Z for /f %%p in ('wmic DataFile where "name='C:\\Temp\\Alarm\\Archive\\20200508\\sDiag\\%filename%'" ge

我正在尝试获取文件的最新修改日期,这些文件几乎具有相同的名称(CompactReg00的共同点)

我希望这个日期对不同的日期设置是安全的,所以我想使用wmic命令。 如果我这样使用该命令,该命令会很好地工作:

set filename=CompactReg00_20200504T112430Z
for /f %%p in ('wmic  DataFile where "name='C:\\Temp\\Alarm\\Archive\\20200508\\sDiag\\%filename%'" get lastmodified   ^| find "+" ') do set "val=%%p"
echo %val%
但当我想将其包含到另一个for循环中以获取所有“CompactReg00”文件的最新修改日期时,我无法获取%val%值

这是我的剧本:

for /R %%a IN (*CompactReg00*) DO (
        echo %%~na
        for /f %%p in ('wmic  DataFile where "name='C:\\Temp\\Alarm\\Archive\\20200508\\sDiag\\%%~na'" get lastmodified   ^| find "+" ') do set "val=%%p"
        echo %val%
        echo %%~na_%val%
        )

你能帮我纠正它或找到另一种方法来获得这个最后修改的日期始终是yyyymmdd吗?参考@Stephan发布的链接,你应该在循环之前使用
SetLocal EnableDelayedExpansion
,对于…do,并进行一些调整以获得日期为
yyyymmdd

@echo关闭
SetLocal EnableDelayedExpansion
@对于(*CompactReg00*)中的/R%%a,请执行以下操作(
回声“%%~nxa”
@对于('wmic数据文件,其中“name='C:\\Temp\\Alarm\\Archive\\20200508\\sDiag\\%%~nxa'”get lastmodified^ | find“+”)中的/f%%p,请执行以下操作(
设置“val=%%p”
回声“!瓦尔!”
设置“年份=!val:~0,4!”
设置“月=!val:~4,2!”
设置“day=!val:~6,2!”
回声“%%~na_uval!”
回声!年!!月!!日!
)
)
暂停

一个问题。同样有用的是:如果您没有将
%%p
赋值给变量,而是立即使用它,则不需要延迟扩展;当然
echo%%~na\up
需要在
for/F
循环中,但这不会改变任何其他内容,因为它无论如何只迭代一次……对于所需的
YYYYMMDD
echo%%~na\up!var:~0,8!
就足够了。