Este es el zip packer interno de Total Commander:
Sin embargo, quiero usar mi 7zip Packer. Cuando selecciono 5 archivos, obtengo 5 archivos .zip separados para cada archivo seleccionado. ¿Cómo hago eso en 7zip?
Este es el zip packer interno de Total Commander:
Sin embargo, quiero usar mi 7zip Packer. Cuando selecciono 5 archivos, obtengo 5 archivos .zip separados para cada archivo seleccionado. ¿Cómo hago eso en 7zip?
Respuestas:
No estoy seguro de que pueda hacer lo que sugiere mediante la interfaz gráfica de usuario, pero ciertamente puede hacerlo desde la línea de comandos:
FOR %i IN (*.*) DO 7z.exe a "%~ni.7z" "%i"
Debería cambiar primero el directorio (el cd
comando) al F:\Downloads
directorio, o cualquier directorio en el que desee realizar la compresión masiva. Además, es bastante fácil sustituir * .exe o cualquier extensión que desee filtrar para comprimir esos documentos.
Y el anillo decodificador secreto:
%i
es una variable que contiene el nombre del archivo para cada paso del bucle(*.*)
es el criterio de selección, podría ser fácilmente * .exe o similar7z.exe
es la versión de línea de comando de 7-Zip%~ni
- esto expande la variable% i solo al nombre del archivo - sin extensiónSi solo desea agregar las carpetas para un directorio dado, el comando es un poco más complejo ya que por defecto FOR solo funciona con archivos. Necesitamos darle información adicional:
FOR /F "usebackq delims=?" %i IN (`DIR /B /A:D`) DO 7z.exe a "%i.7z" "%i"
Esto funciona debido a algunas piezas de lo que parece magia:
/F
le dice a FOR que repita el valor expandido en ()usebackq
le dice a FOR que voy a pasar un comando y usar la salida para iterardelims=?
le dice a FOR que quiero separar los tokens en el ?
- un carácter ilegal en los nombres de archivos y directorios. Solo quiero una ficha./B
de DIR
es de formato desnudo - sólo el nombre/A:D
de DIR
es para restringir los resultados por atributo, el D es para los directoriosSi desea encapsular esto dentro de un archivo por lotes, el único cambio que tendrá que hacer es escapar dos veces de la variable% i:
FOR %%i IN (*.*) DO 7z.exe a "%%~ni.7z" "%%i"
Me gusta la respuesta de Goyuix. Sin embargo, si está utilizando Windows 7 (o tiene instalado Power Shell) y también utiliza la versión de línea de comandos de 7-zip, 7za.exe, puede ejecutar este comando:
dir | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
También puede cambiar "dir" a "dir * .exe" para seleccionar solo archivos ejecutables.
Una cosa buena de Power Shell es que está trabajando con objetos en lugar de cadenas. Así que podrías ser realmente específico si quisieras. Por ejemplo:
dir *.csv | ? { $_.Length -lt 18900 -and $_.LastWriteTime -ge [DateTime] "07/01/2011" } | ForEach-Object { & "7za.exe" a $_.BaseName $_.Name }
Esto solo incluirá archivos que:
EDITAR Si desea archivos zip en lugar de archivos 7-zip, use zip.exe de InfoZip en su lugar.
7z a -tzip archive.zip *.exe
Puede descargar e instalar el complemento 7zip para Total Commander desde http://www.ghisler.com/plugins.htm Una vez que lo haga en el lado derecho de la ventana desde su captura de pantalla, habrá otra selección para la compresión 7zip. Con esa opción, puede lograr exactamente lo que está pidiendo.
Acabo de estar trabajando exactamente en este problema y uno de los problemas que encontré fue la duplicación del nombre de la carpeta dentro del archivo, es decir, al comprimir una carpeta llamada "foo" .\foo\fighters.txt
se genera un archivo que contiene en lugar de solo uno fighters.txt
.
La respuesta, por lo tanto, es ir al directorio que se está procesando y hacer que el archivo aparezca en el directorio (raíz) anterior, luego regresar a ese directorio para procesar la siguiente carpeta.
También es importante contar con 7zip ignorar archivos CMD postal vigente y dentro del directorio raíz para evitar que acaben dentro del archivo, por lo tanto las -x!*.zip
y -x!*.cmd
exclusión argumentos.
Este script también mantendrá estructuras recursivas de carpetas.
@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
El código anterior debe copiarse en un archivo por lotes como "compress_dirs.cmd" y ejecutarse como administrador desde el directorio que contiene las carpetas que desea comprimir.
Espero que esto ayude.
Si necesita mantener la estructura de carpetas y guardar cada archivo en su propia estructura, intente esto:
Guarde este comando en un archivo con extensión .bat y póngalo en la carpeta que necesita comprimir:
FOR /R %%i IN (*.*) DO "C:\Program Files\7-Zip\7z.exe" a "%%i.7z" "%%i" -sdel
Nota:
-sdel: elimina el archivo original (opcional, si solo desea mantener el archivo comprimido)