先做几个预备:
dir /od /tw /s ..\path\to\somedir
:列出所有目录的文件+子目录,按日期+最后修改时间排序,
dir /o-d /tw /s ..\path\to\somedir
:相同,但顺序相反(最旧的最后一个)。
接下来,我对现有路径使用本地示例。我们走吧:
dir /tc /o-d /s gstmp\*yell*.tif ^| findstr 2010
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: D479-1658
Verzeichnis von C:\downloads\gstmp
08/06/2010 05:01 PM 19 compression-g4-emptypage-tiffsep1(Yellow).tif
08/06/2010 05:00 PM 19 compression-lzw-emptypage-tiffsep1(Yellow).tif
08/06/2010 04:57 PM 19 compression-g3-tiffsep1(Yellow).tif
08/06/2010 04:57 PM 19 compression-crle-tiffsep1(Yellow).tif
08/06/2010 04:56 PM 19 compression-pack-share-tiffsep1(Yellow).tif
08/06/2010 04:53 PM 19 compression-g4-share-tiffsep1(Yellow).tif
08/06/2010 04:52 PM 19 compression-lzw-share-tiffsep1(Yellow).tif
08/06/2010 04:51 PM 19 compression-default-share-tiffsep1(Yellow).tif
08/06/2010 03:59 PM 19 compression-none-share-tiffsep.Yellow.tif
08/06/2010 03:55 PM 19 share-tiffsep.Yellow.tif
10 Datei(en) 190 Bytes
我们现在不喜欢额外的标题和摘要信息。我们可以通过过滤某些东西来摆脱这种情况。我将简单地使用“2010”。
但现在真正的问题开始了:创建日期和时间可能会以不同的格式打印,具体取决于您的“语言环境”。你可以看到自己,它目前对我的看法。
如果我们可以将日期显示为与数字顺序完全匹配的格式,它不会起作用吗?然后我们可以实现一些逻辑,通过简单的数字比较来决定删除。让我们试试(如果这对我有用,它不一定对你有用——你可能需要适应你的语言环境)。请注意我正在使用的“反引号”(“``”)以及 ^ 符号:
for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif ^
^| findstr 2010`) do echo. %I %J %K %L %M %N %O %P
此处输出:
08 06 2010 05 01 PM 19 compression-g4-emptypage-tiffsep1(Yellow).tif
08 06 2010 05 00 PM 19 compression-lzw-emptypage-tiffsep1(Yellow).tif
08 06 2010 04 57 PM 19 compression-g3-tiffsep1(Yellow).tif
08 06 2010 04 57 PM 19 compression-crle-tiffsep1(Yellow).tif
08 06 2010 04 56 PM 19 compression-pack-share-tiffsep1(Yellow).tif
08 06 2010 04 53 PM 19 compression-g4-share-tiffsep1(Yellow).tif
08 06 2010 04 52 PM 19 compression-lzw-share-tiffsep1(Yellow).tif
08 06 2010 04 51 PM 19 compression-default-share-tiffsep1(Yellow).tif
08 06 2010 03 59 PM 19 compression-none-share-tiffsep.Yellow.tif
08 06 2010 03 55 PM 19 share-tiffsep.Yellow.tif
我们快到了,但还没有完全做到。我们需要更改令牌的顺序,%I %J %K
以便%K %I %J
我们的日期显示为2010 08 06
而不是08 06 2010
。此外,如果我们写出正确的不带空格的标记,那么可以得到一个日期+时间字符串,这样就可以很容易地进行比较。另外,我们跳过%O
并用箭头替换它,只是为了好玩:
for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif ^
^| findstr 2010`) do echo. %K%I%J%L%M%N ==^> %P
输出现在更改为:
201008060501PM ==> compression-g4-emptypage-tiffsep1(Yellow).tif
201008060500PM ==> compression-lzw-emptypage-tiffsep1(Yellow).tif
201008060457PM ==> compression-g3-tiffsep1(Yellow).tif
201008060457PM ==> compression-crle-tiffsep1(Yellow).tif
201008060456PM ==> compression-pack-share-tiffsep1(Yellow).tif
201008060453PM ==> compression-g4-share-tiffsep1(Yellow).tif
201008060452PM ==> compression-lzw-share-tiffsep1(Yellow).tif
201008060451PM ==> compression-default-share-tiffsep1(Yellow).tif
201008060359PM ==> compression-none-share-tiffsep.Yellow.tif
201008060355PM ==> share-tiffsep.Yellow.tif
现在您几乎已准备好比较第一个字段。
但请考虑一下:我的时间以 12 小时为周期,使用AM
和PM
。因此,为了进行数字比较,我们必须将 PM 和 AM 分别替换为一个数值,这样我们的翻译04:51 AM
and04:50 PM
仍然会以正确的方式进行数字排序。
现在怎么样:
for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif ^
^| findstr 2010`) do (
if "%K%I%J %N %L%M" GEQ "20100806 PM 0457" (
echo. [ %K-%I-%J %L:%M %N %P. ]
)
)
这列出了所有应该删除的文件,还显示了它们各自的日期。要真正删除,我们只需要将最后echo. ... %P.
一个替换为del/p/f/s %P
.