¿Cómo extraigo múltiples archivos contenidos en subdirectorios en una carpeta, enviando los resultados a las carpetas donde están los archivos?
¿Cómo extraigo múltiples archivos contenidos en subdirectorios en una carpeta, enviando los resultados a las carpetas donde están los archivos?
Respuestas:
En primer lugar, instale 7-zip .
Cree un bat
archivo en la raíz del directorio que contenga muchos subdirectorios con archivos dentro. Luego pegue lo siguiente en:
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x "%%X"
)
popd
)
Inicie el bate, y todos los rar / zips se extraerán en la carpeta en la que están contenidos.
¿Como funciona esto?
FOR / D / r %% F en ("*") DO (
For loop para recorrer todas las carpetas en el directorio actual y colocar la ruta en una variable
%%F
.
pushd% CD%
Ponga el directorio actual en el que estamos en la memoria.
cd %% F
Establecer la carpeta de la variable
%%F
como el directorio actual.
FOR %%X in (*.rar *.zip) DO (
Para todos los archivos
rar
yzip
en la carpeta actual, haga:
"C:\Program Files\7-zip\7z.exe" x "%%X"
Ejecute 7-zip en los archivos. Se necesitan comillas
%%X
porque algunos nombres de archivos tienen espacios.
popd
Regrese al directorio anterior que previamente almacenamos en la memoria.
Espero que sea útil para alguien.
Tuve problemas para ejecutar el script desde Windows Vista. Cuando ejecuté el código, no pasó nada. Necesitaba ser administrador para poder ejecutar el script. Cuando hice clic derecho en el archivo .bat y "ejecutar como administrador" no funcionó porque por alguna razón se inició en la carpeta system32 (si no recuerdo mal). Para resolver esto, simplemente use la variable de entorno de Windows (explicada aquí: Variables de entorno de Windows )% ~ dp0 para volver al directorio desde el que se ejecutó el script.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO (
pushd %CD%
cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files\7-zip\7z.exe" x %%X
)
popd
)
Asegúrese de que ningún archivo * .rar o * .zip esté al mismo nivel que el script. Deberían estar un nivel abajo.
Espero que este comentario haya ayudado a alguien.
find . -name "*.zip" | while read filename; do unzip -o -d "`dirname "$filename"`" "$filename"; done;
Inicia una búsqueda recursiva en el directorio actual, encuentra todos los archivos que terminan en .zip y luego los canaliza en un bucle. Para cada archivo que encuentra, ejecuta un comando de descompresión en el archivo con la salida desviada al directorio del archivo.
Sin embargo, las respuestas anteriores funcionan si está ejecutando Windows 64-bit
y 7-Zip 32-bit
, la ruta correcta es C:\Program Files (x86)\7-Zip
para 7-Zip. A continuación se muestra el guión que funcionó para mí.
@echo on
cd %~dp0
FOR /D /r %%F in ("*") DO ( pushd %CD% cd %%F
FOR %%X in (*.rar *.zip) DO (
"C:\Program Files (x86)\7-zip\7z.exe" x %%X
)
popd
)