Como arquivar milhares de arquivos em múltiplos arquivos 7-Zip sem usar a função split 7-Zip?

0

Eu preciso arquivar arquivos em arquivos 7-zip que estão sob um tamanho definido pelo usuário (em GB). Eu não posso usar a função split no 7-Zip, pois isso impediria que o usuário do outro lado recebesse meus arquivos, os extraísse e trabalhasse neles até que eles tivessem todos os arquivos no volume dividido. Os arquivos com os quais estou trabalhando estão organizados em pastas mensais dentro de pastas anuais.

Eu preciso manter a estrutura de pastas, portanto, quero que cada pasta mensal contenha arquivos 7-Zip apenas para essa pasta. Eu também quero que ele limpe os arquivos de origem assim que os arquivos forem criados. O script deve ser executado na 'Pasta Pai' e arquivar todos os arquivos abaixo, mantendo a estrutura da pasta.

    
por divolb 21.04.2017 / 19:36

1 resposta

2

Acabou respondendo a minha própria pergunta ...

@echo off
setlocal EnableExtensions EnableDelayedExpansion
::set max 7z archive -- 200MB = 209,715,200
set MaxBag=210000000
echo ******************************************************************************************
echo 'PruneNBag.cmd' uses the current path it is placed in as the cleanup point, called 'TreeTop'
echo All files in all subfolder(s) below the TreeTop will be condensed into 7z archives.
echo ******************************************************************************************
:Ask
::Confirm current working directory is the intended 'TreeTop'
echo Current Directory is:  "%CD%"  Use as 'TreeTop'?  (Y/N/exit)
set INPUT=
set /P INPUT=Type input: %=%
If /I "%INPUT%"=="y" goto yes 
If /I "%INPUT%"=="n" goto no
If /I "%INPUT%"=="exit" goto exit
echo Incorrect Input & goto Ask
:yes
set treetop=%CD%
echo Pruning current directory, %treetop%
"%PROGRAMFILES%-Zipz.exe" h * "!Bag!" "%treetop%\%%a\%%b"
ping 1.1.1.1 -n 1 -w 3000>nul
    FOR /f %%a in ('dir /b /ad %treetop%') DO (
        set BagCounter=1
        FOR /f %%b in ('dir /b %treetop%\%%a') DO (
            set Bag=%treetop%\%%a\%%a-!BagCounter!.7z
            "%PROGRAMFILES%-Zipz.exe" a -mx0 "!Bag!" "%treetop%\%%a\%%b" -sdel
            FOR /F "usebackq" %%A IN ('!Bag!') DO (
                set BagSize=%%~zA
                echo bagsize is !BagSize!
                echo maxbag is !MaxBag!
                if !BagSize! GEQ !MaxBag! set /a BagCounter += 1
                echo BagCount is !BagCounter!
            )
        )
    )
echo Pruning operations complete...
ping 1.1.1.1 -n 1 -w 2000>nul
goto end
:no
echo Place PruneNBag.cmd in 'TreeTop' folder root and run again.
pause
echo closing...
ping 1.1.1.1 -n 1 -w 2000>nul
exit
:end
echo closing...
ping 1.1.1.1 -n 2 -w 2000>nul
exit
    
por 12.05.2017 / 20:16

Tags