Batch file 如何列出时间戳大于x的文件

Batch file 如何列出时间戳大于x的文件,batch-file,Batch File,我试图创建一个文件名列表,其中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

我试图创建一个文件名列表,其中
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的比较并不像我预期的那样有效,但我不确定什么是错误的。

(这不是答案,但我不能添加这么长的注释)

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

@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") 
在我这边,它会打印以下结果(如预期):

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

此外,您还可以找到有关比较的信息:

如果仅在比较运算运算符(EQU、NEQ、, 使用LSS、LEQ、全球技术法规、GEQ)。==比较运算符始终为空 结果是字符串比较

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

正确的数字比较:如果2个GEQ 15回波“更大”

使用括号或引号将强制进行字符串比较:IF(2)GEQ (15) 如果“2”GEQ“15”回声“更大”,则回声“更大”

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

我建议您使用

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

这将强制进行字母模式比较。我建议
cmd
尝试将值作为INT32s进行比较,并将值转换为GobbleDeBook,因为它们是使用
cmd
的范围限制进行计算的

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