Il formato zip è il formato standard per la compressione dei file, tuttavia alcuni sistemi preferiscono utilizzare il formato 7z, perché offre rapporti di compressione decisamente migliore. Se anche a voi è capitato qualche volta di dover convertire un archivio zip in 7z oppure in rar, vi sarete sicuramente accorti quanto è noiosa la procedura perchè dobbiamo estrarre tutto l’archivio e poi ricomprimerlo. Questa procedura possiamo farla quando sono due, al massimo tre archivi. Ma quando invece ne dobbiamo convertire molti. Ecco che ci viene in aiuto un semplicissimo script in Batch scritto da: Jason Faulkner.
Con questo script è possibile convertire tutti i files zip presenti in una cartella in files 7z.
Codice:
@ECHO OFF
ECHO Deep Archive
ECHO Written by: Jason Faulkner
ECHO SysadminGeek.com
ECHO.
ECHO.REM Takes a Zip file and recompresses it as 7z archive.
REM Script process:
REM 1. Decompress the existing archive.
REM 2. Compress the extracted files in 7z format.
REM 3. (optional) Validate the new 7z file.
REM 4. (optional) Delete the source archive.
REM
REM Usage:
REM DeepArchive ZipFile
REM
REM Requirements:
REM The 7-Zip command line tool (7za.exe) is in a location set in the PATH variable.
REM
REM Additional Notes:
REM This script processes a single zip archive.
REM To process all zip archives in a folder, use the ForFiles command from the command line:
REM FORFILES /P “pathtozipfiles” /M *.zip /C “cmd /c DeepArchive @path”
REM
REM To run the archive compression/decompression as low priority background processes
REM add this in front of the 7ZA commands (DO NOT add this in front of the validation 7ZA command):
REM START /BelowNormal /Wait
REM Adding the above command will use a new window to perform these operations.SETLOCAL EnableExtensions EnableDelayedExpansion
REM Should the deep archive file be validated? (1=yes, 0=no)
SET Validate=0REM Compression level: 1,3,5,7,9 (higher=slower but more compression)
SET CompressLevel=5REM Delete source zip file on success? (1=yes, 0=no)
SET DeleteSourceOnSuccess=1REM —- Do not modify anything below this line —-
SET ArchiveFile=%1
SET DeepFile=%ArchiveFile:.zip=.7z%
SET tmpPath=%TEMP%%~nx1
SET tmpPathZip=”%tmpPath%*”
SET tmpPath=”%tmpPath%”
SET tmpFile=”%TEMP%tmpDeepArchive.txt”IF NOT EXIST %tmpPath% (
MKDIR %tmpPath%
) ELSE (
RMDIR /S /Q %tmpPath%
)ECHO Extracting archive: %ArchiveFile%
7ZA x %ArchiveFile% -o%tmpPath%
ECHO.ECHO Compressing archive: %DeepFile%
7ZA a -t7z -mx%CompressLevel% %DeepFile% %tmpPathZip%
ECHO.IF {%Validate%}=={1} (
ECHO Validating archive: %DeepFile%
7ZA t %DeepFile% | FIND /C “Everything is Ok” > %tmpFile%
SET /P IsValid=< %tmpFile% IF !IsValid!==0 ( ECHO Validation failed! DEL /F /Q %DeepFile% ECHO. GOTO Fail ) ELSE ( ECHO Validation passed. ) ECHO. ) GOTO Success :Success IF {%DeleteSourceOnSuccess%}=={1} DEL /F /Q %ArchiveFile% ECHO Success GOTO End :Fail ECHO Failed GOTO End :End IF EXIST %tmpFile% DEL /F /Q %tmpFile% IF EXIST %tmpPath% RMDIR /S /Q %tmpPath% ENDLOCAL
Allora, vediamo come funziona, come prima cosa copiamo l’intero codice qui sopra in un file di testo e lo salviamo come un file batch con nome ed estensione “DeepArchive.bat“; possiamo anche scaricarlo direttamente su SysadminGeek.com. Ora questo è lo script vero e proprio. All’interno dello script si possono modificare alcuni parametri, che per ora lascio scoprire ai più smanettoni. Lo script per funzionare ha bisogno del programma 7-Zip per linea di comando, quindi scarichiamo l’archivio 7za465.zip e lo estraiamo in C:Windowssystem32.
Tutto è pronto. Per estrarre tutti gli archivi presenti in una determinata cartella basta copiare il file DeepArchive.bat nella cartella dove risiedono gli archivi e digitare dal prompt dei comandi il seguente codice: FORFILES /P “C:UsersFrancescoDesktopzipfile” /M *.zip /C “cmd /c DeepArchive @path” dove C:UsersFrancescoDesktopzipfile lo dobbiamo sostituire con il percorso della cartella in cui si trovano gli archivi. All’inizio può essere scocciante, ma una volta completato il lavoro, convertire questi archivi sarà un gioco da ragazzi. Ah, vi ricordo che lo script sostituisce i file zip con quelli 7z, quindi i files zip verranno persi (Se vogliamo che ciò non accada, sostituiamo la riga SET DeleteSourceOnSuccess=1 con SET DeleteSourceOnSuccess=0)
#1Fabrizio Cinti
Dovreste specificare che FORFILES è un comando esistente solo sotto Vista/7. Inoltre, segnalo l'archiviatore open source izarc che converte da un formato all'altro (non solo zip e non solo 7z) senza bisogno di scriptare. Nel mio sistema ha sostituito anche 7-zip.