Come estrarre più archivi contenuti in sottodirectory in una cartella, restituendo i risultati nelle cartelle in cui si trovano gli archivi.
Come estrarre più archivi contenuti in sottodirectory in una cartella, restituendo i risultati nelle cartelle in cui si trovano gli archivi.
Risposte:
Innanzitutto, installa 7-zip .
Crea un bat
file nella radice della directory contenente molte sottodirectory con archivi all'interno. Quindi incollare quanto segue in:
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x "%%X"
)
popd
)
Avvia la mazza e tutte le rar / zip verranno estratte nella cartella in cui sono contenute.
Come funziona?
FOR / D / r %% F in ("*") DO (
Affinché loop esegua il loop in tutte le cartelle nella directory corrente e inserisca il percorso in una variabile
%%F
.
pushd% CD%
Metti la directory corrente in cui ci troviamo.
cd %% F
Imposta la cartella dalla variabile
%%F
come directory corrente.
FOR %%X in (*.rar *.zip) DO (
Per tutti i file
rar
ezip
nella cartella corrente, eseguire:
"C:\Program Files\7-zip\7z.exe" x "%%X"
Esegui 7-zip sui file. Le virgolette sono necessarie
%%X
perché alcuni nomi di file contengono spazi.
popd
Ritornare alla directory precedente precedentemente memorizzata nella memoria.
Spero che questo sia utile a qualcuno.
Ho avuto problemi con l'esecuzione dello script da Windows Vista. Quando ho eseguito il codice non è successo nulla. Avevo bisogno di essere amministratore per poter eseguire lo script. Quando ho fatto clic con il tasto destro sul file .bat e "esegui come amministratore" non ha funzionato perché per qualche motivo è stato avviato nella cartella system32 (se ricordo bene). Per risolvere questo problema, utilizza semplicemente la variabile di ambiente Windows (spiegata qui: Variabili di ambiente Windows )% ~ dp0 per tornare alla directory da cui è stato eseguito lo script.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x %%X
)
popd
)
Assicurarsi che nessun file * .rar o * .zip sia allo stesso livello dello script. Dovrebbero essere di un livello inferiore.
Spero che questo commento abbia aiutato qualcuno.
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
Avvia una ricerca ricorsiva nella directory corrente, trova tutti i file che terminano in .zip, quindi li convoglia in un ciclo. Per ogni file che trova, esegue un comando di decompressione sul file con l'output shuntato nella directory del file.
Le risposte sopra funzionano, tuttavia, se si è in esecuzione Windows 64-bit
e 7-Zip 32-bit
, il percorso corretto è C:\Program Files (x86)\7-Zip
per 7-Zip. Di seguito è la sceneggiatura che ha funzionato per me.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files (x86)\7-zip\7z.exe" x %%X
)
popd
)