【问题标题】:WMIC lastmodified include in for loop [duplicate]WMIC lastmodified 包含在 for 循环中[重复]
【发布时间】:2020-08-24 05:13:30
【问题描述】:

我正在尝试获取具有几乎相同名称的文件的最后修改日期(常见的 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

【问题讨论】:

  • delayed expansion 问题。也很有用:link
  • 如果不将%%p赋值给变量而是立即使用,则不需要延迟扩展;当然 echo %%~na_%%p 需要在 for /F 循环内,但这不会改变任何其他内容,因为它只迭代一次......

标签: for-loop batch-file wmic last-modified


【解决方案1】:

参考@Stephan 发布的链接你应该在循环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

【讨论】:

  • 对于想要的YYYYMMDDecho "%%~na_!var:~0,8!"就足够了。
猜你喜欢
  • 2014-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多