Как найти файлы с таким же именем и удалить все, кроме самого нового в Windows из командной строки

300
liamZ

Я хочу хранить только самые новые версии файлов с одинаковыми именами в папке и подпапках. Другими словами, я хочу удалить дубликаты файлов в папке и подпапках, учитывая только то, что два файла являются дубликатами, если они имеют одинаковое имя (и расширение) и сохраняют только тот, который имеет самую новую дату изменения.

Я знаю, что могу сделать это вручную с помощью таких программ, как CCleaner или Nirsoft SearchMyFiles, но у них нет возможности выбрать все, кроме самого нового, для их удаления, вы должны сделать это вручную.

Так есть ли инструмент командной строки, или cmd bat или powershell для выполнения этой задачи?

0
Поскольку в папке не может быть более одного файла с одинаковым именем, вы имеете в виду файлы с одинаковым именем в подпапках папки? Michael Harvey 5 лет назад 2
Вы уже знаете «то же имя», которое хотите удалить? Michael Harvey 5 лет назад 0
У файлов с одинаковыми именами разные расширения? glenn jackman 5 лет назад 0
Да, извините, я имею в виду в папке и подпапках, и я имею в виду то же имя и расширение. Я хочу удалить дубликаты файлов, учитывая, что два файла являются дубликатами, если имеют одинаковое имя (и расширение) и сохраняют только самый новый. liamZ 5 лет назад 0
пишу файл для вас, так как мне это тоже нужно. Mark Deven 5 лет назад 0

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

0
Mark Deven

Я сделал программу для вас здесь: https://github.com/ITCMD/Remove-Duplicates

DelDupe /? выход:

Deletes duplicate Files except the latest edited.  DelDupe "Directory" "Filename" /F /C Character  Directory: Directory to search for duplicate names. Use C:\Users\IT Command\Documents\Batch Codes\Keep Recent Mod Date for current dir. Filename: Duplicated Filename to search for /F Do not prompt removal /C Provide your own system character: The default character it uses to seperate files is ~. You don't need to know what this means, but if you have the ~ character in your filename then supply your own. Character: The Character you want to use instead of ~  Example: DelDupe "C:\Users\IT Command\Documents\Batch Codes\Keep Recent Mod Date" "Picture.png"  This example will surch all subdirectories in your current folder for a file called "Picture.png" and will delete all copies except for the most recently modified one.  Created by Lucas Elliott www.itcommand.tech 

Обратите внимание, что это не сайт, чтобы попросить людей сделать для вас полные сценарии. Люди злятся, если ты не показываешь, что пробовал (я знаю, ты, наверное, не знаешь, с чего начать). Можно задавать вопрос, как вы, на мой взгляд, но не всегда ожидайте полного ответа. В любом случае, мне просто нужно это для меня.

Привет, большое спасибо за ваш ответ и сценарий. Но имя файла не является параметром в моем вопросе. Я хочу сохранить только последнюю версию каждого файла в дереве каталогов. Я не могу проверить это прямо сейчас, но вы думаете, что-то вроде: `forfiles / p folder / s / c" cmd / c DelDupe folder @path "` будет работать? liamZ 5 лет назад 0
В любом случае, я подумал, что это обычная задача, и будет какой-то инструмент командной строки (exe), но те, что я нашел, например FindDupe или Dupemerge, предназначены для точных дубликатов и их удаления или жесткой связи. Что касается инструментов с графическим интерфейсом, таких как CCleaner и SearchMyFiles, я наконец нашел инструмент, который автоматически сохраняет только последнюю версию для всех файлов с одинаковым именем: CloneSpy. Но я предпочитаю делать это из командной строки. Так что еще раз спасибо за ваш код, и я посмотрю, как это сделать. liamZ 5 лет назад 0
рад слышать это! Mark Deven 5 лет назад 0
Привет, я тестирую DelDupe, и мне пришлось изменить строку 56, чтобы: если / я не определил силу. Но мне жаль говорить, что он не сохраняет последний измененный файл. Он хранит один из других файлов. liamZ 5 лет назад 0
Хм, я посмотрю об этом извините. Mark Deven 5 лет назад 0
Если он был изменен в течение минуты, он не может сказать Mark Deven 5 лет назад 0
У меня есть 6 файлов с одинаковыми именами в подпапках с этими датами изменения: (20120401-122640) (20120120 134232) (20111215 070716) (20120910 064302) (20130723 112316) (20130720 061758), и он сохраняется один (20120910 064302) liamZ 5 лет назад 0
Я нашел, почему Deldupe не работает для меня: мой формат даты ГГГГ-ММ-ДД liamZ 5 лет назад 0
Хм, хорошо. Мне нужно выяснить, как обрабатывать разные даты. Спасибо что сказал мне! Mark Deven 5 лет назад 0
ОК, я уже изменил код для работы с моим форматом. Еще одна вещь, которая не работала, заключалась в том, что она всегда удаляет файлы, когда вы отвечаете N. Я думаю, вам нужно изменить строку 60 на `if! Errorlevel! == 2 goto cleanup`. И, наконец, я обнаружил, что при запуске `DelDupe" rootdir "" name "` при наличии подкаталога "rootdir \ name \" с тем же именем, которое вы даете deldupe, он хочет удалить все файлы внутри него и не ищет другие файлы в других подкаталогах. liamZ 5 лет назад 0
Ой ой извините !!!! Это большой. Mark Deven 5 лет назад 0
Привет, используя инструмент where.exe вместо dir в строке 17 `где / r"% PathN% ""% FileName% ">"% TEMP% \% ran% .ITCMD.log "` решил второй, если я ' Я не ошибаюсь. Еще я обнаружил, что если имя файла начинается с _, оно удаляет все файлы, даже самые последние. liamZ 5 лет назад 0
Хлоп. Ну, я сейчас уйду на пенсию: D Mark Deven 5 лет назад 0