我正在尝试获取几乎相同名称的文件的最后修改日期(共同使用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
之前使用for...do
,并进行一些调整以将日期设为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