【问题标题】:How to list files with a timestamp greater than x如何列出时间戳大于 x 的文件
【发布时间】:2014-08-14 06:02:30
【问题描述】:

我正在尝试创建一个文件名列表,其中LastModified 时间戳大于设定值。

我认为,我非常接近以下几点:

@echo off
setlocal DisableDelayedExpansion

REM delete existing output file
for %%f in (_modified) do if exist %%f.txt del %%f.txt

REM hard code timstamp threshold
set lastTime=20140801000000
echo "lastTime=%lastTime%"

REM set folder to CWD
set "folder=%CD:~2%"
echo "folder=%folder%"

REM search files in folder with extension 'jpg'
FOR /F "skip=1 tokens=1*" %%a in (
        '"wmic datafile where (path='%folder:\=\\%\\' AND Extension='jpg') get 'File Name',LastModified"'
        ) do (
    FOR /F "delims=." %%B in ("%%b") do (
        if %%B LEQ %lastTime% (echo "%%B LEQ1") else (echo "%%B GEQ1")
        if %%B GEQ %lastTime% (echo "%%B GEQ2") else (echo "%%B LEQ2") 
        if %%B GEQ %lastTime% (
            echo %%B %%a>> _modified.txt))
)

但是,对于包含 2 个 jpg 文件的文件夹,其中一个的最后修改时间是 2010-02-22,另一个是 2014-08-14,脚本会打印:

"lastTime=20140801000000"
"folder=\test"
"20100222210624 LEQ1"
"20100222210624 GEQ2"
"20140814155354 LEQ1"
"20140814155354 GEQ2"

输出文件包含两个文件名,而不是预期的结果。

显然 LEQ/GEQ 比较没有按我的预期工作,但我不确定哪里不正确。

【问题讨论】:

    标签: batch-file


    【解决方案1】:

    我建议你使用

    if "%%B" LEQ "%lastTime%"
    

    if x%%B LEQ x%lastTime%
    

    这将强制进行字母模式比较。我建议cmd 尝试将值作为 INT32 进行比较,并且在使用cmd 的范围限制进行评估时,这些值将转换为 gobbledegook

    【讨论】:

      【解决方案2】:

      (不是回答,但我不能添加这么长的评论)

      您能否检查一下 LEQ/GEQ 在简单情况下是否正常工作(没有任何循环和文件操作)? IE。你能运行下面的代码吗?

      @echo off
      set a=20100222210624
      set b=20140814155354
      set lastTime=20140801000000        
      if %a% LEQ %lastTime% (echo "%a% LEQ1") else (echo "%a% GEQ1")
      if %b% GEQ %lastTime% (echo "%b% GEQ2") else (echo "%b% LEQ2") 
      

      在我这边,它会打印以下结果(如预期的那样):

      "20100222210624 LEQ1"
      "20140814155354 GEQ2"
      

      如果你的情况相同,我们应该在其他地方搜索问题。

      另外here你可以找到一些关于比较的东西:

      IF 仅在比较操作符之一(EQU、NEQ、 使用 LSS、LEQ、GTR、GEQ)。 == 比较运算符总是 导致字符串比较。

      这是一个重要的区别,因为如果您将数字比较为 可能导致意外结果的字符串:“2”将大于 “19”和“026”将大于“26”。

      正确的数值比较:IF 2 GEQ 15 echo "更大"

      使用括号或引号将强制进行字符串比较:IF (2) GEQ (15) echo "更大" IF "2" GEQ "15" echo "更大"

      (另外,here 在接受的答案中,您可以找到另一种比较文件日期的方法(即您可以为此类比较创建临时文件))

      【讨论】:

        猜你喜欢
        • 2014-07-17
        • 1970-01-01
        • 2014-04-29
        • 1970-01-01
        • 1970-01-01
        • 2011-09-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多