¿Cómo extraigo todos los archivos en los subdirectorios de esta carpeta?

18

¿Cómo extraigo múltiples archivos contenidos en subdirectorios en una carpeta, enviando los resultados a las carpetas donde están los archivos?

HopelessN00b
fuente

Respuestas:

22

En primer lugar, instale 7-zip .

Cree un batarchivo 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 %%Fcomo el directorio actual.

FOR %%X in (*.rar *.zip) DO (

Para todos los archivos rary zipen la carpeta actual, haga:

"C:\Program Files\7-zip\7z.exe" x "%%X"

Ejecute 7-zip en los archivos. Se necesitan comillas %%Xporque algunos nombres de archivos tienen espacios.

popd

Regrese al directorio anterior que previamente almacenamos en la memoria.

Espero que sea útil para alguien.

anon
fuente
3

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.

Daniel P
fuente
Esto funcionó bien para mi. Tenía que cambiar la ruta a "C: \ Archivos de programa (x86)" de "C: \ Archivos de programa", como estoy corriendo 64 bits Win 7.
Contango
1
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.

Tasker Curtis
fuente
1

Sin embargo, las respuestas anteriores funcionan si está ejecutando Windows 64-bity 7-Zip 32-bit, la ruta correcta es C:\Program Files (x86)\7-Zippara 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
)
Ryan
fuente
Sin embargo, si tiene la versión de 64 bits de 7zip, la ruta correcta es: "C: \ Archivos de programa \ 7-zip \ 7z.exe" como se indica en la respuesta original.
Rohn Adams