Исключить файлы в папке, которые дублируются в другом дереве папок

294
user1766833

У меня есть две папки. Одна из них (папка 1) имеет изображения, а другая (папка 2) имеет несколько подпапок с изображениями. Я хотел найти изображения в папке 1, которые дублируются в папке 2 или любой из ее подпапок, и удалить их. Перемещение недубликатов в новую папку (папка 3) также является опцией.

Могу ли я сделать это с помощью командной строки? Мне нужен сценарий?

Я попытался использовать FreeFileSynch, но он не работает, если в папке 2 есть подпапки.

Изменить: предложение Robocopy интересно, но хотя он может копировать подпапки и их содержимое, я не думаю, что он может копировать только файлы внутри подпапок.

0
Смотрите здесь: https://superuser.com/questions/1037559/windows-cmd-copy-directories-and-content-recursively-if-the-files-do-not-exist/1037763#1037763 Pimp Juice IT 7 лет назад 0
Спасибо за ответ, но я не думаю, что Robocopy может сравнивать файлы в папке с файлами в нескольких подпапках. user1766833 7 лет назад 0

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

0
Aiden Hong

Вот правильный способ сделать это, без внешних загрузок. На первый взгляд это выглядит много, но как только вы это сделаете, это будет очень просто. Он работает во всех версиях Windows от 7 до 95. Для нашего примера предположим, что вы сравниваете две директории с именами «A» и «B». 1. запустите cmd.exe, чтобы получить командную строку. (В Windows 7 PowerShell не будет работать для этого, к вашему сведению.) Затем сделайте это снова, чтобы два из них были открыты рядом друг с другом. 2. в каждом окне перейдите в каталоги, которые вы хотите сравнить. (Использование команд 'cd'. Если вам это неудобно, то вам, вероятно, следует воспользоваться внешними утилитами, если вы не хотите изучать материал командной строки.) 3. введите 'dir / b> A.txt' в один окно и «dir / b> B.txt» в другой. Вы' Теперь у меня будет два текстовых файла со списком содержимого каждого каталога. Флаг / b означает пустой, что сокращает список каталогов до имен файлов. 4. Переместите B.txt в ту же папку, что и A.txt. 5. введите «fc A.txt B.txt». Команда 'fc' означает сравнение файлов. В результате будет выведен список различий между двумя файлами с дополнительной строкой текста над и под каждым различием, чтобы вы знали, где они находятся. Чтобы узнать больше о форматировании вывода, введите «fc /?». по подсказке. Вы также можете передать различия в другой файл, используя что-то вроде 'fc A.txt B.txt> sizes.txt'. Повеселись. Команда 'fc' означает сравнение файлов. В результате будет выведен список различий между двумя файлами с дополнительной строкой текста над и под каждым различием, чтобы вы знали, где они находятся. Чтобы узнать больше о форматировании вывода, введите «fc /?». по подсказке. Вы также можете передать различия в другой файл, используя что-то вроде 'fc A.txt B.txt> sizes.txt'. Повеселись. Команда 'fc' означает сравнение файлов. В результате будет выведен список различий между двумя файлами с дополнительной строкой текста над и под каждым различием, чтобы вы знали, где они находятся. Чтобы узнать больше о форматировании вывода, введите «fc /?». по подсказке. Вы также можете передать различия в другой файл, используя что-то вроде 'fc A.txt B.txt> sizes.txt'. Повеселись.

Источник: https://answers.microsoft.com/en-us/windows/forum/windows_7-files/how-to-compare-two-folders-in-win-7-prof-64bit/f99f7b3d-43a9-49d8- b8eb-6b550103e726 Aiden Hong 7 лет назад 0
Все шло хорошо, пока я не заметил, что «dir / b> B.txt» дает мне только подпапки внутри папки B, а не файлы внутри ее подпапок, что мне и было нужно. user1766833 7 лет назад 0
0
user1766833

Таким образом, решение, которое я нашел, не идеально, но работает.

Я скопировал все файлы из папки 1 во временную папку, выравнивая иерархию с помощью команды forfiles в командной строке. Затем я переместил файлы из временной папки в папку 2, заменив некоторые из них. Файлы, которые были перемещены, были удалены, поскольку они уже были в папке 1.

1) В командной строке: forfiles / p C: \ folder1 / s / c "cmd / c copy @path C: \ временная папка"

2) В проводнике Windows: переместите файлы из временной папки в папку 2 и замените существующие файлы. Пока файлы выбраны, удалите их. Остальные файлы - это файлы из папки 2, которых не было в папке 1.