Questo è lo zip packer interno di Total Commander:
Tuttavia, voglio usare il mio packer 7zip. Quando seleziono 5 file, ottengo 5 archivi .zip separati per ogni file selezionato. Come posso farlo in 7zip?
Questo è lo zip packer interno di Total Commander:
Tuttavia, voglio usare il mio packer 7zip. Quando seleziono 5 file, ottengo 5 archivi .zip separati per ogni file selezionato. Come posso farlo in 7zip?
Risposte:
Non sono sicuro che puoi fare ciò che stai suggerendo utilizzando l'interfaccia utente grafica, ma puoi certamente dalla riga di comando:
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"
Dovresti prima cambiare la directory (il cd
comando) nella F:\Downloads
directory o qualunque directory desideri eseguire la compressione di massa. Inoltre, è abbastanza facile sostituire in * .exe o in qualsiasi estensione che si desidera filtrare per comprimere solo quei documenti.
E l'anello del decodificatore segreto:
%i
è una variabile che contiene il nome del file per ogni passaggio nel ciclo(*.*)
è il criterio di selezione, potrebbe essere facilmente * .exe o simile7z.exe
è la versione della riga di comando di 7-Zip%~ni
- questo espande la variabile% i al solo nome del file - nessuna estensioneSe si desidera solo aggiungere le cartelle per una determinata directory, il comando è un po 'più complesso poiché, per impostazione predefinita, FOR funziona solo con i file. Dobbiamo fornirgli alcune informazioni aggiuntive:
FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"
Questo funziona a causa di alcuni pezzi di quella che sembra magia:
/F
dice a FOR di scorrere il valore espanso in ()usebackq
dice a FOR che ho intenzione di passare un comando e utilizzare l'output per iteraredelims=?
dice a FOR che voglio spezzare i token a parte ?
- un personaggio illegale nei nomi di file e nelle directory. Voglio solo un token./B
a DIR
è per formato a nudo - solo il nome/A:D
a DIR
è per limitare i risultati per l'attributo, la D è per le directorySe vuoi incapsulare questo all'interno di un file batch, l'unica modifica che dovrai apportare è di doppio escape della variabile% i:
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
Mi piace la risposta di Goyuix. Tuttavia, se si utilizza Windows 7 (o è installato Power Shell) e si utilizza anche la versione della riga di comando di 7-zip, 7za.exe, è possibile eseguire questo comando:
dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Puoi anche cambiare "dir" in "dir * .exe" per selezionare solo i file eseguibili.
Una cosa bella di Power Shell è che stai lavorando con oggetti invece che con stringhe. Quindi potresti diventare davvero specifico se lo desideri. Per esempio:
dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Ciò includerà solo file che:
MODIFICA Se si desidera file zip anziché 7-zip, utilizzare invece zip.exe di InfoZip .
7z a -tzip archive.zip *.exe
Puoi scaricare e installare il plugin 7zip per Total Commander da http://www.ghisler.com/plugins.htm Una volta che lo fai sul lato destro della finestra dallo screenshot ci sarà un'altra selezione per la compressione 7zip. Con questa opzione puoi realizzare esattamente quello che stai chiedendo.
Ho appena lavorato esattamente su questo problema e uno dei problemi che ho riscontrato è stato la duplicazione del nome della cartella all'interno dell'archivio, vale a dire quando si comprime una cartella chiamata "pippo" .\foo\fighters.txt
viene prodotto un archivio invece di uno solo fighters.txt
.
La risposta, quindi, è quella di accedere alla directory in elaborazione e fare in modo che l'archivio appaia nella directory (root) precedente, quindi tornare a quella directory per elaborare la cartella successiva.
È anche importante che 7ZIP ignori i file ZIP e CMD esistenti all'interno della directory principale per impedire che finiscano all'interno dell'archivio, quindi gli argomenti di esclusione -x!*.zip
e -x!*.cmd
.
Questo script manterrà anche le strutture di cartelle ricorsive.
@echo off
REM Ensures variables set within the batch file are local to
REM this script only and will be removed when finished.
setlocal
if exist *.zip goto zip_exist
for /d %%X in (*) do (
cls
cd /D %%X
"e:\Program Files\7-Zip\7z.exe" a -r -x!*.zip -x!*.cmd "..\%%X.zip" "*.*"
cd ..
)
goto end
:zip_exist
Echo.
Echo Note: for this script to work, compression of
Echo pre-existing zip files is not possible.
:end
pause
Il codice sopra deve essere copiato in un file batch come "compress_dirs.cmd" ed eseguito come amministratore dalla directory contenente le cartelle che si desidera comprimere.
Spero che sia di aiuto.
Se è necessario mantenere la struttura delle cartelle e salvare ogni file nella propria struttura, provare questo:
Salvare questo comando in un file con estensione .bat e inserirlo nella cartella che è necessario comprimere:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
Nota:
-sdel: elimina il file originale (facoltativo, se si desidera mantenere solo il file compresso)