PDA

Показать полную графическую версию : [решено] Удаление одинаковых файлов в подкаталогах


njg
17-11-2011, 13:20
Решил почистить резервные копии от дубликатов. Задача в следующем:
Необходимо сравнить все *.rar-файлы в "сегодняшнем" каталоге с файлами во всех "старых" каталогах и удалить одинаковые по размеру (удалять только из папок со старыми резервными копиями, в текущей не трогать).
Резервные копии лежат в папках типа "_backup_2011-11-17" и создаются каждый день, кроме выходных.
Название "сегодняшнего" каталога было бы удобно передавать в скрипт в качестве параметра.

Нашел скрипт от megaloman (http://forum.oszone.net/post-1714623-8.html), но не смог адаптировать его под перебор фалов в подкаталогах. Прошу помощи.

@Echo Off

Set Otkuda=D:\Delete
Set S1=-1

FOR /F "usebackq delims=" %%f IN (`Dir /B /A:-D /O:SN "%Otkuda%\"`) DO Call :DelSize "%Otkuda%\%%f"
GoTo :Eof

:DelSize
Set S2=%~z1

If %S1% NEQ %S2% (
Set S1=%S2%
Set N1=%1
) Else (
Del %1
If Exist %N1% Del %N1%
)

njg
18-11-2011, 04:29
Осилил свою задумку. Посмотрите что получилось. Если есть ошибки или неточности, исправьте, пожалуйста.

@echo off
SET FOLDERNAME=_BackUp_%DATE:~6,4%-%DATE:~3,2%-%DATE:~0,2%

echo.
echo Удаление дубликатов:

For %%I In ("%FOLDERNAME%\*.rar") Do (
call :deldub "%%~I"
)


echo.
pause
exit /b 0
rem ==========================================================================


rem ==========================================================================
:deldub
REM Процедура сравнения и удаления дубликатов
For /F "UseBackQ Delims=" %%I In (`Dir _BackUp_* /AD /B /ON 2^>nul`) Do (
If /I %%~I NEQ %FOLDERNAME% (
For %%J In ("%%~I\*.rar") Do (
If /I "%%~nxJ" EQU "%~nx1" (
If /I "%%~zJ" EQU "%~z1" (
del /F "%%~J"
Echo Удален %%~J
)
)
)
)
)
exit /b 0
rem ==========================================================================




© OSzone.net 2001-2012