Как удалить имена файлов с похожим частичным именем?

302
Hayley

У меня есть куча имен файлов с временными метками (вплоть до наносекунд), и я хочу сохранить только один файл в секунду. Например, вот некоторые имена файлов:

11-14-29-033.jpg 

(что означает, что файл был записан в 11-й час, 14-й минуте, 29-й и 33-й наносекундах).

11-14-29-602.jpg 11-14-29-839.jpg 11-14-29-953.jpg 11-14-30-406.jpg 11-14-30-847.jpg 11-14-31-091.jpg 11-14-31-419.jpg 11-14-31-667.jpg 11-14-32-364.jpg 11-14-32-619.jpg 11-14-32-913.jpg 11-14-33-150.jpg 11-14-33-485.jpg 11-14-33-708.jpg 11-14-34-052.jpg 11-14-34-336.jpg 11-14-35-174.jpg 11-14-36-563.jpg 11-14-36-788.jpg 11-14-37-278.jpg 11-14-37-584.jpg 11-14-38-050.jpg 11-14-38-841.jpg 11-14-39-196.jpg 11-14-39-736.jpg 11-14-39-870.jpg 11-14-40-091.jpg 11-14-40-766.jpg 11-14-41-052.jpg 11-14-41-676.jpg 

Есть ли способ, которым я могу написать пакетный файл (в Windows), чтобы удалить все, кроме 1 файла в секунду?

1
Это возможно. Начните с `for`, используйте отсортированный вывод` dir`. В цикле сохраните первые 8 букв имени файла. Когда придет снова => удалить, еще => сохранить новый префикс. Melebius 6 лет назад 1
Это ничего не меняет в сущности вопроса, но я серьезно сомневаюсь в части «наносекунд». Миллисекунды - этому я поверю. Kamil Maciorowski 6 лет назад 0
ты прав Камил Hayley 6 лет назад 0

1 ответ на вопрос

2
FatalBulletHit

Это должно сделать работу:

@ECHO OFF SETLOCAL EnableDelayedExpansion  SET "source=C:\adjust\path"  FOR /R "%source%" %%F IN ("??-??-??-???.jpg") DO ( SET "file_name=%%~nF" SET "file_name=!file_name:~0,-4!" REN "%%F" "!file_name!%%~xF" >nul 2>&1 )  FOR /R "%source%" %%G IN ("??-??-??-???.jpg") DO ( DEL "%%G" )  ECHO Done^^! PAUSE 

Этот FOR /Rцикл будет переименовывать каждый .jpgфайл из HH-MM-SS-MMMв HH-MM-SS, просто удаляя последние 4 символа, если имя файла уже не существует. Команда RENне будет переименовывать файл, а затем будет удалена.

Ваш код, похоже, удаляет все файлы, кроме первого, который был переименован в «! File_name! .Jpg». В списке файлов, который я привел в качестве примера, файлы ниже будут теми, которые не будут удалены: 11-14-29-033.jpg 11-14-30-406.jpg 11-14-31-091. jpg 11-14-32-364.jpg 11-14-33-150.jpg 11-14-34-052.jpg 11-14-35-174.jpg 11-14-36-563.jpg 11-14- 37-278.jpg 11-14-38-050.jpg 11-14-39-196.jpg 11-14-40-091.jpg 11-14-41-052.jpg У меня есть тысячи файлов для обработки, и я хотите сохранить один файл в секунду и отбросить остальные изображения, которые появляются в ту же секунду. Hayley 6 лет назад 0
@ Хейли Я только что проверил это на своей машине (Windows 10), и это работает. Я немного подкорректировал, чтобы избежать ошибок. Вы уверены, что в сценарии есть строка `SETLOCAL EnableDelayedExpansion`? FatalBulletHit 6 лет назад 0
Вы правы, мне не хватало SETLOCAL EnableDelayedExpansion. Оно работает. Большое спасибо за Вашу помощь!! Hayley 6 лет назад 0