Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
1

Удаление одного из повторяющихся файлов

15.01.2015, 22:11. Показов 3118. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый вечер! Помогите сделать bat файл, который бы сравнивал содержимое папки и удалял копии, оставляя одну.

По сути пример : 6 файлов в папке , 3 файла одинаковых по содержимому , надо удалить одинаковые по содержимому оставив 1 файл из этих трёх.
Кто сможет сделать заранее спасибо!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2015, 22:11
Ответы с готовыми решениями:

Удаление из одного каталога файлов, присутствующих и в другом каталоге
Всем привет. НЕ получается выполнить задание: . Написал код по методичке, сохранил как bat;...

Копирование отсутствующих и изменённых файлов по результатам сверки файлов одного каталога с файлами другого
Всем привет. такая вот задача у меня. я не селен в этом. но стараюсь. есть 2 каталога (1. NEW, 2....

Запись одного из повторяющихся полей
Добрый день. Ломаю голову над алгоритмом. У меня есть 2 DataGrid, один я заполняю из второго. Во...

Удаление повторяющихся строк
Доброго времени суток, пытаюсь удалить повторяющиеся строки по ID вот так: DELETE from `houses`...

6
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
16.01.2015, 16:20 2
вот сам батник, который ищет и удаляет:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@echo off
 
if not "%1" == "" goto L0:
for %%i in (*.*) do call %0 %%i
goto END:
 
:L0
if not "%2" == "" goto L1:
for %%i in (*.*) do call %0 %1 %%i
goto END:
 
:L1
if not exist %1 goto END:
if not exist %2 goto END:
if "%1" == "%2" goto END:
fc /b %1 %2
if "%errorlevel%" == "0" del %1
 
:END
а вот "генератор", тоже батник, который создает файлы и каталог для них:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off
 
if not exist 8\nul md 8
cd 8
 
echo a > 1a.txt
echo b > 1b.txt
echo c > 1c.txt
echo d > 1d.txt
 
echo a > 2a.txt
echo b > 2b.txt
echo c > 2c.txt
echo d > 2d.txt
 
cd ..
т.е. сначала запускаете "генератор", он сделает папку с именем "8",
и внутри 8 шт. текстовых файлов с разными именами,
потом копируете в эту папку первый батник, запускаете его и смотрите
на результат

Зачем нужен "генератор"? Затем что первый батник не работает с именами
файлов в которых есть пробелы.
1
8 / 6 / 2
Регистрация: 07.11.2014
Сообщений: 130
16.01.2015, 17:10  [ТС] 3
Спасибо за ответ в теме)! Буду пробовать!
0
1747 / 352 / 41
Регистрация: 15.10.2012
Сообщений: 549
16.01.2015, 22:17 4
Цитата Сообщение от buggydancer Посмотреть сообщение
вот сам батник, который ищет и удаляет
А где там сравнение по содержимому?
Вот примерный вариант (не без недостатков) на основе fc.exe (просто поиск дубликатов, без удаления)
Bash
1
2
3
4
5
6
7
8
@echo off
for %%i in (*.*) do (
    for %%j in (*.*) do (
        if not "%%~i" == "%%~j" (
            fc /b "%%~i" "%%~j" > nul && echo "%%~i" eq "%%~j"
        )
    )
)
Будут выведены все пары дупликатов во всех сочетаниях (недостаток), но при удалении такого быть не должно. С другой стороны, при удалении список файлов меняется (уменьшается), надо протестировать, как ведёт себя при этом for (на fat и ntfs могут быть разные результаты).

В общем, это только общая идея использования fc.exe
3
3460 / 1998 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
16.01.2015, 22:40 5
Цитата Сообщение от Smitis Посмотреть сообщение
Будут выведены все пары дупликатов во всех сочетаниях (недостаток), но при удалении такого быть не должно. С другой стороны, при удалении список файлов меняется (уменьшается), надо протестировать, как ведёт себя при этом for (на fat и ntfs могут быть разные результаты).
В общем, это только общая идея использования fc.exe

Можно использовать и "comp.exe":
Bash
1
@(for %%i in (*) do @for %%j in (*) do @if "%%i" neq "%%j" echo n| comp "%%i" "%%j">nul 2>&1&& echo %%i %%j)& pause>nul
.
3
251 / 239 / 16
Регистрация: 31.12.2009
Сообщений: 324
17.01.2015, 12:25 6
Цитата Сообщение от Smitis Посмотреть сообщение
А где там сравнение по содержимому?
в 16-й строке верхнего батника, вы его запускали?
Цитата Сообщение от ComSpec Посмотреть сообщение
Можно использовать и "comp.exe":
блин! про него я забыл!

Smitis и ComSpec, ваши варианты безусловно "современные",
а мой - архаичный, да еще и рекурсивный, если ТС не разобравшись
пойдет его сдавать "училке" то она просто обязана будет задать ему
много "интересных вопросов"
0
Эксперт WindowsАвтор FAQ
17996 / 7697 / 892
Регистрация: 25.12.2011
Сообщений: 11,470
Записей в блоге: 16
20.01.2015, 20:02 7
Быстрее будет сперва сравнивать размеры файлов, и если одинаковы, уж тогда вызывать внешнюю утилиту бинарного сравнения.
0
20.01.2015, 20:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2015, 20:02
Помогаю со студенческими работами здесь

Удаление повторяющихся слов
Задание: из текста, который вводит пользователь, нужно удалить повторяющиеся слова. Пример: просто...

Удаление повторяющихся строк
Доброе время суток. есть таблица в не данные: col1-col2-col3---col4...

Удаление повторяющихся символов
Есть строка символов, я её обрабатываю, удаляю слово с повторяющимися символами,дело в том что...

Удаление повторяющихся символов
Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Напечатать все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru