首先做一些准备工作:
-
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
to %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
and PM
。因此,为了进行数值比较,我们必须将 PM 和 AM 分别替换为数值,这样我们的翻译04:51 AM
and 04: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. ]
)
)
这列出了所有应删除的文件,还显示了它们各自的日期。到really删除,我们只需替换最后一个即可echo. ... %P.
by a del/p/f/s %P
.