Avevo la necessità di creare un file d’archivio (7z) per ciascuna sottocartella presente in una determinata cartella padre. 7-Zip alla mano e riga di comando per una soluzione presto fatta, l’ho provato con successo su macchina Windows 2019, giusto qualche accortezza che vado a descriverti poco sotto ma null’altro, è l’ideale nel caso in cui tu non voglia compattare tutto un grande calderone in un solo file d’archivio (come spesso accade per esigenza).
Archivi multipli con 7-Zip
Il codice qui sotto parte da una cartella padre contenente molte sottocartelle, ognuna delle quali verrà inserita in un archivio 7z separato, tu puoi certamente modificare alcuni parametri come la posizione di 7-Zip e – se lo desideri – il nome del file prodotto. Copia il codice qui di seguito e salvalo in un file CMD (esempio: 7z.cmd
) tramite editor di testo, ti spiego cosa puoi ritoccare.
@echo off if exist "%ProgramFiles%\7-Zip\7z.exe" set APP="%ProgramFiles%\7-Zip\7z.exe" if exist "%ProgramFiles(x86)%\7-Zip\7z.exe" set APP="%ProgramFiles(x86)%\7-Zip\7z.exe" for /d %%X in (*) do ( PUSHD "%%X" %APP% a "..\%%X.7z" "*" POPD )
Il codice parte dal presupposto che tu abbia installato 7-Zip a 64 bit (o che sia installato in una macchina a 32 bit), per questo motivo il puntamento al file 7z.exe
corrisponderà a %ProgramFiles%
. Se così non fosse (per esempio nel caso in cui tu abbia installato 7-Zip 32 bit su una macchina a 64 bit) ricorda di sostituire %ProgramFiles%
con %ProgramFiles(x86)%
.
L'articolo è stato aggiornato
Il codice aggiornato verifica l’esistenza di 7-Zip nella cartella Program Files (valida per sistemi a 64 o 32 bit), in caso di fallimento (sistema a 64 bit ma 7-Zip installato a 32 bit) passerà all’utilizzo della cartella Program Files (x86). È chiaramente disponibile anche la versione scaricabile di 7z.cmd (su Box) già aggiornata, vedi in fondo all’articolo.
Lo script analizza tutte le cartelle trovate nella sua stessa posizione e per ciascuna di queste richiamerà l’eseguibile di 7-Zip producendo un archivio chiamato con lo stesso nome della cartella ed estensione 7z (utilizzando le impostazioni predefinite di 7-Zip).
Per modificare il nome del file potrai ritoccare %%X.7z
inserendo ciò che ritieni opportuno, per esempio archivio_%%X.7z
o %%X_archivio.7z
, cerca solo di evitare di toccare %%X
perché è ciò che riporta il nome della cartella compattata sul file 7z finale (diversamente faticheresti a riconoscere quell’archivio). Nota importante: lo script (quindi il file CMD) dovrà risiedere nella stessa cartella padre dove all’interno ci sono le sottocartelle da compattare. Lanciarlo da un percorso UNC di rete non funzionerà, dovrai quindi mappare l’unità di rete con una lettera tutta sua prima di lanciarlo (diversamente inizierà a compattare ciò che trova nella cartella di sistema, quindi C:\Windows
).
Per comodità ti propongo il download del file CMD già pronto, lo trovi qui: go.gioxx.org/7zcmd (aggiornato).
Questo è quanto, spero possa tornarti utile.
Riconoscimenti: stackoverflow.com/questions/35183941/7zip-bat-command-compress-multiple-folders-to-multiple-corresponding-archives
L'articolo potrebbe non essere aggiornato
Questo post è stato scritto più di 5 mesi fa, potrebbe non essere aggiornato. Per qualsiasi dubbio ti invito a lasciare un commento per chiedere ulteriori informazioni! :-)