батник для "более плотного" сжатия директорий
запускать из директории, которую надо заархивировать
сначала он обойдёт её рекурсивно, распакует архивы, указанные в REPACK, в одноимённые папки и удалит оригиналы (при этом "архивы в архивах" также будут распакованы)
потом сожмёт всё содержимое директории в одноимённый архив с указанными в ARC_OPTIONS параметрами
Код:
@echo off
set ARC_OPTIONS=-mx
set REPACK=*.zip;*.rar;*.tar;*.gz;*.arc;*.7z
call :unpack_all %CD%
echo.
for /D %%D in (.) do set ARC_NAME=%%~nxD
arc a -r %ARC_OPTIONS% "..\%ARC_NAME%.arc" *
goto :eof
:unpack_all
for /R "%~1" %%F in (%REPACK%) do (
if not exist "%%~dpnF" (
echo Unpacking %%F...
md "%%~dpnF"
arc x -dp"%%~dpnF" -- "%%F" >nul
if errorlevel 1 (
echo [ERR] Error unpacking %%F
rd /s /q "%%~dpnF"
) else (
del "%%F"
call :unpack_all "%%~dpnF"
)
) else (
echo [WRN] Folder %%~dpnF exists already - cannot unpack %%F
)
)
запускать из директории, которую надо заархивировать
сначала он обойдёт её рекурсивно, распакует архивы, указанные в REPACK, в одноимённые папки и удалит оригиналы (при этом "архивы в архивах" также будут распакованы)
потом сожмёт всё содержимое директории в одноимённый архив с указанными в ARC_OPTIONS параметрами
Код:
@echo off
set ARC_OPTIONS=-mx
set REPACK=*.zip;*.rar;*.tar;*.gz;*.arc;*.7z
call :unpack_all %CD%
echo.
for /D %%D in (.) do set ARC_NAME=%%~nxD
arc a -r %ARC_OPTIONS% "..\%ARC_NAME%.arc" *
goto :eof
:unpack_all
for /R "%~1" %%F in (%REPACK%) do (
if not exist "%%~dpnF" (
echo Unpacking %%F...
md "%%~dpnF"
arc x -dp"%%~dpnF" -- "%%F" >nul
if errorlevel 1 (
echo [ERR] Error unpacking %%F
rd /s /q "%%~dpnF"
) else (
del "%%F"
call :unpack_all "%%~dpnF"
)
) else (
echo [WRN] Folder %%~dpnF exists already - cannot unpack %%F
)
)