Пофайловая рекурсивная архивация RAR с воссозданием структуры каталогов

Понадобилось как-то сделать копию каталога с файлами и подкаталогами в виде аналогичного каталога, но с RAR архивами каждого файла. Набросал батничек.

  1. @echo off
  2. @echo off
  3. Setlocal EnableDelayedExpansion
  4.  
  5. rem Путь к архиватору (консольному)
  6. set rar="rar.exe"
  7.  
  8. rem Первый параметр - каталог, в котором лежат файлы для архивирования
  9. set Src=%1
  10. if "%Src%" EQU "" goto help
  11.  
  12. rem Второй параметр - Путь к каталогу куда будут помещаться архивы
  13. set Dst=%2
  14. if "%Dst%" EQU "" goto help
  15.  
  16. rem Третий параметр - расширение файлов
  17. set ext=*.*
  18. if "%3" NEQ "" (set ext=%3)
  19.  
  20. rem Четвертый параметр - пароль для архива
  21. if "%4" NEQ "" (set passw=-hp%4)
  22.  
  23. :: Пофайловое архивирование с воссозданием каталогов
  24. for /f "delims=" %%i in ('dir /b /s /a-d "%Src%\%ext%"') do (
  25. for /f "delims=" %%j in ("%%i") do (
  26. if not exist "%Dst%%%~pj" (MD "%Dst%%%~pj" > nul)
  27. %rar% a -ep1 -dh -idc -m1 %passw% "%Dst%%%~pj%%~nj" "%%j"
  28. )
  29. )
  30.  
  31. exit
  32.  
  33. :help
  34. @echo Пофайловая архивация с воссозданием структуры каталогов
  35. @echo Вызов: %~nx0 каталог_источник каталог_приемник [расширение_файлов] [пароль]
  36. @echo.
  37. @echo Пример1: %~nx0 c:\temp c:\temp1 *.jpg
  38. @echo - архивация всех файлов с раширением jpg без пароля
  39. @echo.
  40. @echo Пример2: %~nx0 c:\temp c:\temp1 "" pupkin
  41. @echo - архивация всех файлов с паролем pupkin