WMIC lastmodified 包含在 for 循环中

WMIC lastmodified include in for loop

我正在尝试获取具有几乎相同名称(共同的 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%
        )

你能帮我更正一下吗,或者找到另一种方法让这个 lastmodified 日期总是 yyyymmdd

参考@Stephan 发布的 link 你应该在循环 for...do 之前使用 SetLocal EnableDelayedExpansion 并进行一些调整以获得日期 yyyymmdd :

@echo off
SetLocal EnableDelayedExpansion
@for /R %%a IN (*CompactReg00*) DO (
    echo "%%~nxa"
    @for /f %%p in ('wmic  DataFile where "name='C:\Temp\Alarm\Archive\20200508\sDiag\%%~nxa'" get lastmodified   ^| find "+" ') do (
        set "val=%%p"
        echo "!val!"
        set "year=!val:~0,4!"
        set "month=!val:~4,2!"
        set "day=!val:~6,2!"
        echo "%%~na_!val!"
        echo !year!!month!!day!
    )
)
pause