Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление одинаковых файлов в подкаталогах (http://forum.oszone.net/showthread.php?t=220745)

njg 17-11-2011 13:20 1797104

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

Нашел скрипт от megaloman, но не смог адаптировать его под перебор фалов в подкаталогах. Прошу помощи.

Код:

@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 1797688

Осилил свою задумку. Посмотрите что получилось. Если есть ошибки или неточности, исправьте, пожалуйста.

Код:

@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 ==========================================================================



Время: 09:39.

Время: 09:39.
© OSzone.net 2001-