Así que estoy tratando de usar 7zip en un archivo por lotes para tomar los archivos en una carpeta y comprimirlos como archivos individuales. Entonces, el primer archivo obtiene su propio archivo zip, y el siguiente y así sucesivamente. Estuve buscando en Internet y probé varios códigos diferentes. Hasta ahora solo logré comprimirlos con éxito como un único archivo zip y se envió a mi escritorio.
Desafortunadamente, perdí el código que hizo eso, y ahora estoy atascado con esto que parece no hacer nada.
@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause
Quiero que cada archivo tenga su propio archivo zip y que el archivo zip comparta el nombre del archivo, menos la extensión, por supuesto.
Cualquier ayuda es muy apreciada.
Respuestas:
Script por lotes
(Establezca las rutas de carpeta explícitas completas de origen y destino en la parte superior y luego ejecute según sea necesario. La fuente es donde existen los archivos que desea comprimir y el destino es donde desea que se compriman).
Línea de comando
Recursos adicionales
fuente
Su script original hace lo siguiente, línea por línea:
@echo on
Le dice al símbolo del sistema que imprima cada comando en el archivo por lotes antes de ejecutarlos. Esto es solo para que pueda "ver" lo que realmente está haciendo antes de que lo haga.
cd "C:\Users\MVD21\Desktop\test"
C Hanges D irectorio en lo que espero es la ruta en la que desea comprimir todos los archivos.
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
El parámetro para el
IN
aquí es(C:\Users\MVD21\Desktop\test)
. Esto hará que el "cuerpo" del bucle (la acción detrás de la palabra claveDO
) se ejecute exactamente una vez , con el%i
parámetro asignado al valorC:\Users\MVD21\Desktop\test
. ¡No es sorprendente que esto no haga lo que quieres! Parece que esto comprimiría todo el directorio en un solo archivo .7z.Si no hace nada , probablemente sea porque no puede encontrar el camino de
7z.exe
. Si ese archivo no está en el directorio actual (esetest
directorio mencionado anteriormente), entonces tendrá que estar enPATH
(en la%PATH%
variable de entorno; intenteecho %PATH%
en un shell para ver en qué está configurado actualmente). De lo contrario, debe copiar7z.exe
en el directorio actual o especificar una ruta absoluta a donde se encuentra (como, por ejemplo,"C:\Program Files\7-zip\7z.exe" ...
).pause
Cuando finaliza el script, esta palabra clave solo le dice al shell que espere a que presione enter o cierre el símbolo del sistema en lugar de salir de él inmediatamente.
Cuando está creando un script por lotes (o, de hecho, cualquier otra cosa que se ocupe del código), debe dejar de tratar todo el script como una copia-pegar monolítica que no (intenta) entender, y en su lugar desglosa problema en sub-partes que puede resolver individualmente, luego engancharlas Esto le permitirá resolver problemas de forma independiente y crear soluciones en lugar de pedirle a otra persona que haga todo su trabajo por usted. Lo recomiendo altamente.
En su caso, tiene los siguientes subcomponentes de su problema:
7z
utilidad.Las posibilidades de que alguien tenga una respuesta que resuelva sus necesidades específicas es menor que la posibilidad de encontrar las piezas más generales individualmente.
Esta pregunta, 'Cómo hacer algo a cada archivo en un directorio en un script por lotes' resuelve la mitad de su problema.
El objetivo de la respuesta es que solo comienza con esta parte de esa respuesta de StackOverflow:
for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f
y cambia la parte en la que está haciendo algo (el
echo %%f
) para hacer lo que quieres hacer . Sé que debe cambiar esa parte, porque analicé el texto del script y entendí lo que significa cada carácter y parámetro, por lo que puedo razonar sobre dónde quiero insertar mi propio código.Aquí hay un "código aéreo" (¡no probado!):
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"
Las declaraciones
@echo on
ypause
anteriores son una buena práctica, por lo que puede dejarlas. Y probablemente también quiera guardar esacd
declaración, si sus archivos se encuentran en esa ruta.Entonces, ¿qué nos deja eso?
Si respondes con "¡No funciona!", NO te ayudaré. Si intenta esto y no funciona, DEBE decirme en los comentarios la siguiente información:
PATH
variable de entorno? (marque esto, como se mencionó anteriormente, conecho %PATH%
uncmd
aviso).fuente