Precedente :: Successivo |
Autore |
Messaggio |
uomodeighiacci Dio minore

Registrato: 01/01/09 20:29 Messaggi: 769
|
Inviato: 23 Nov 2009 21:52 Oggetto: archiviare più cartelle assieme |
|
|
ho una cartella contenente molte sottocartelle. ho la necessità di creare un archivio (rar zip o altro) del contenuto di ogni sottocartella.
Per essere più chiaro diciamo che la cartella A contiene le cartelle B e C, io archivio B e C e le cancello. Ora la cartella A contiene 2 archivi di nome B.zip e C.zip
Io ho molte più di 2 sottocartelle ed archiviarle una per una è lunga.. esiste un modo per farlo in blocco? |
|
Top |
|
 |
uomodeighiacci Dio minore

Registrato: 01/01/09 20:29 Messaggi: 769
|
Inviato: 21 Dic 2009 13:01 Oggetto: |
|
|
nessuna buona nuova?  |
|
Top |
|
 |
skan Eroe


Registrato: 14/12/09 13:34 Messaggi: 61
|
Inviato: 21 Dic 2009 13:50 Oggetto: |
|
|
utilizza qualcosa da linea di comando e fatti un bat...c'è la sintassi FOR per scorrerti tutta la directory di primo livello e poi con un 7Zip (che accetta anche argomenti da linea di comando), sono arrugginito, ma immagino che se cerchi nella guida con un
Codice: |
Dir /AD /B > listadir.txt
|
ti metti la lista di tutti le subdirectory a partire da dove lanci il comando.
poi con un for
Codice: |
for /F "usebackq delims==" %i IN (listadir.txt) DO @echo NOME CARTELLA: %i
|
@echo NOME CARTELLA: %i è un test che ho fatto ora per verificare se il comando era corretto. in questo caso non mi fa altro che fare un elenco
NOME CARTELLA: PRIMA DIRECTORY
NOME CARTELLA: SECONDA DIRECTORY
etc etc..
NOME CARTELLA: ULTIMA DIRECTORY
quindi il comando funziona, tu al posto del @echo devi trovare un comando per zippare le subdirectory, 7zip lo fa cosi'
7z a nomearchivio.zip percorso
dove a è il parametro per aggiungere (add), immagino che un comando del genere possa funzionare:
Codice: |
for /F "usebackq delims==" %i IN (listadir.txt) DO 7z a archive_%i.zip PERCORSOTUADIR\%i\*
|
ma non l'ho testato, e se ti ci butti a testare occhio, comunque a sbatterci le corne via Batch la procedura la sistemi.
poi puoi dare il comando rdir %i in un ulteriore loop eventualmente per parametrizzare anche la cancellazione ma assicurati sempre che lo script non compia errori, perchè fai in un attimo a perdere dati via batch.
P.s quando lo metti in un file .bat aggiungi un % in più ad ogni variabile es.
for /F "usebackq delims==" %%i IN (listadir.txt) DO @echo NOME CARTELLA: %%i |
|
Top |
|
 |
uomodeighiacci Dio minore

Registrato: 01/01/09 20:29 Messaggi: 769
|
Inviato: 21 Dic 2009 16:58 Oggetto: |
|
|
ciao
Grazie di aver risposto, purtroppo di cmd e bat ne so quanto basta solo per fare qualche "scherzone"..
Se si potesse rendere più semplice o se potessi farlo tramite un programma sarebbe meglio (se invece hai voglia di darmi la "pappa pronta" non mi lamento.. ) |
|
Top |
|
 |
skan Eroe


Registrato: 14/12/09 13:34 Messaggi: 61
|
Inviato: 21 Dic 2009 17:50 Oggetto: |
|
|
uomodeighiacci ha scritto: | ciao
Grazie di aver risposto, purtroppo di cmd e bat ne so quanto basta solo per fare qualche "scherzone"..
Se si potesse rendere più semplice o se potessi farlo tramite un programma sarebbe meglio (se invece hai voglia di darmi la "pappa pronta" non mi lamento.. ) |
guarda, ho pensato che tutto sommato farebbe comodo pure a me, ho fatto delle prove, e mi sembra che funzioni, provalo prima su un percorso con dei "file sacrificabili"
l'ho chiamato archive.bat, apri un notepad e poi salvalo con quel nome e mettilo sulla root dove avrai le sottocartelle da zippare:
Codice: |
Dir /AD /B > listadir.txt
for /F "usebackq TOKENS=1* delims=;" %%i IN (listadir.txt) DO 7z a "%%i.zip" "%%i\*"
for /F "usebackq TOKENS=1* delims=;" %%i IN (listadir.txt) DO RMDIR /S /Q "%%i"
del listadir.txt
|
spiegazione:
- DIR /AD /B > listadir.txt
crea un file temporaneo dove elenca solo le cartelle (/AD) una per riga e solo il nome senza percorso o attributi /B
- for /F "usebackq TOKENS=1* delims=;" %%i IN (listadir.txt) DO 7z a "%%i.zip" "%%i\*"
scorre il file riga per riga e crea un file che si chiama uguale alla cartella e comprime tutto quello che sta all'interno della sua cartella
- for /F "usebackq TOKENS=1* delims=;" %%i IN (listadir.txt) DO RMDIR /S /Q "%%i"
QUESTA RIGA LA PUOI TOGLIERE PER I TEST O SE NON VUOI CANCELLARE LE CARTELLE DOPO, riscorre tutto l'elenco e cancella la directory e (/S) l'eventuali sottodirectory sopprimento il messaggio di conferma (/Q)
- del listadir.txt
finito il lavoro rimuove il file temporaneo.
Ripeto, testalo prima su una cartella di test, buttaci 2 cartelle piene di file di prova e poi lancia il comando, non mi assumo responsabilità di errore di cancellazione, per essere ancora più sicuro, togli la riga della rimozione delle cartelle
Ah, dimenticavo, assicurati di avere 7Zip installato e non standalone, se ce l'hai standalone aggiungi nel PATH, la directory che ospita 7z.exe
P.s credo funzioni anche con "delims=", il ; tanto non lo troverà mai, ma dato che mi funge ho lasciato cosi' |
|
Top |
|
 |
uomodeighiacci Dio minore

Registrato: 01/01/09 20:29 Messaggi: 769
|
Inviato: 21 Dic 2009 22:57 Oggetto: |
|
|
funziona!
thank you very grazie
Non andava ma è bastato inserire la directory di 7z.exe come dicevi tu.
Sai se è possibile cambiare il livello di compressione? Mi servirebbe minimo o senza compressione |
|
Top |
|
 |
skan Eroe


Registrato: 14/12/09 13:34 Messaggi: 61
|
Inviato: 21 Dic 2009 23:50 Oggetto: |
|
|
uomodeighiacci ha scritto: | funziona!
thank you very grazie
Non andava ma è bastato inserire la directory di 7z.exe come dicevi tu.
Sai se è possibile cambiare il livello di compressione? Mi servirebbe minimo o senza compressione |
nella guida di 7Zip (F1) i parametri da linea di comando c'è il parametro -m per passargli il livello di compressione (x), 0 è la copia solo senza compressione, per usare la compressione bisogna specificare il tipo -t, in questo caso -tzip).
Non l'ho testata:
for /F "usebackq TOKENS=1* delims=;" %%i IN (listadir.txt) DO 7z a -tzip "%%i.zip" "%%i\*" -mx=0
salvati quell'altro come backup, sostituisci la riga 2 e riprova
p.s mx può essere: 0 | 1 | 3 | 5 | 7 | 9, no numeri pari. |
|
Top |
|
 |
uomodeighiacci Dio minore

Registrato: 01/01/09 20:29 Messaggi: 769
|
Inviato: 22 Dic 2009 12:28 Oggetto: |
|
|
ottimo e abbondante..
grazie, funziona tutto, inoltre mettendo nella stringa 7z.exe e spostando i files 7z.exe e 7z.dll nella stessa cartella del .bat se ne ottiene una sorta di versione "portable".
Ora vado a costruire il più grande pupazzo di neve del mondo. |
|
Top |
|
 |
skan Eroe


Registrato: 14/12/09 13:34 Messaggi: 61
|
Inviato: 22 Dic 2009 12:30 Oggetto: |
|
|
uomodeighiacci ha scritto: | ottimo e abbondante..
grazie, funziona tutto, inoltre mettendo nella stringa 7z.exe e spostando i files 7z.exe e 7z.dll nella stessa cartella del .bat se ne ottiene una sorta di versione "portable".
Ora vado a costruire il più grande pupazzo di neve del mondo. |
bene bene, prego. ciao  |
|
Top |
|
 |
uomodeighiacci Dio minore

Registrato: 01/01/09 20:29 Messaggi: 769
|
Inviato: 04 Gen 2011 18:58 Oggetto: |
|
|
Dopo più di un anno mi sono accorto che il buon vecchio WinRAR permette di fare la stessa cosa
Selezionare le cartelle da archiviare > cliccare su "archivia" > appare una finestrella, portarsi nel menù "file" e mettere la spunta ad "inserisci ogni file in un propio archivio" |
|
Top |
|
 |
|