Первые несколько предварительных данных:
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
и 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. ]
)
)
В этом списке перечислены все файлы, которые следует удалить, а также указаны их соответствующие даты.Чтобы действительно удалить, нам просто нужно заменить последний echo. ... %P.
на del/p/f/s %P
.