Come faccio a creare file zip separati per each file / directory selezionato in 7zip?

Questo è l'imballatore di zip interno da Total Commander:

Un'immagine della finestra di dialogo del compressore Zip Total Commander.

Tuttavia voglio usare il mio imballatore 7zip. Quando seleziono 5 file, ottengo 5 archivi separati per each file selezionato. Come posso fare questo in 7zip?

Non sono sicuro di poter fare quello che stai suggerendo utilizzando l'interface grafica dell'utente, ma certamente dalla row di command:

FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i" 

Dovresti cambiare la directory (il command cd ) nella directory F:\Downloads innanzitutto, o qualunque directory desideri eseguire la compressione di massa. Inoltre, è abbastanza facile sostituire in * .exe o qualunque estensione si desidera filtrare per solo comprimere questi documenti.

E l'anello decodificatore segreto:

  • %i è una variabile che contiene il nome del file per each passaggio del ciclo
  • (*.*) è il criterio di selezione, potrebbe essere facilmente * .exe o simile
  • 7z.exe è la versione a row di command di 7-Zip
  • %~ni – questo espande la variabile% i solo il nome del file – nessuna estensione

Se si desidera aggiungere solo le cartelle per una determinata directory, il command è un po 'più complesso come per impostazione predefinita solo funziona con i file. Dobbiamo alimentarle 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 quello che sembra magia:

  • /F indica FOR per iterare sopra il valore espanso in ()
  • usebackq dice FOR che passerò un command ed usi l'output per iterare
  • delims=? dice FOR che voglio interrompere i token a parte ? – un carattere illegale nei nomi di file e nelle directory. Voglio solo un token.
  • Il /B in DIR è per il formato nudo – solo il nome
  • Il /A:D in DIR è per limitare i risultati per attributo, il D è per le directory

Se vuoi incapsulare questo interno di un file batch, l'unica modifica che dovrai fare è duplicare la fuga 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 utilizza anche la versione di row di command di 7-zip, 7za.exe, è ansible eseguire questo command:

 dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name } 

È inoltre ansible modificare "dir" in "dir * .exe" per select solo i file eseguibili.

Una cosa bella di Power Shell è che stai lavorando con oggetti invece di stringhe. Quindi potresti diventare davvero specifico se volevi. 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:

  1. avere un'estensione csv
  2. less di 18.900 byte di size
  3. ultimamente modificato il 7/1/2011 o dopo

EDIT Se si desidera archiviare zip invece di file 7-zip, utilizzare invece zip.exe di InfoZip .

È ansible scaricare e installare il plug-in 7zip per Total Commander da http://www.ghisler.com/plugins.htm Una volta che lo fai sul lato destro della window dal tuo screenshot ci sarà un'altra selezione per la compressione 7zip. Con questa opzione puoi eseguire esattamente quello che stai chiedendo.