Archivo de lote FOR Loop 7-zip extrae una extensión de archivo específica

0

Estoy tratando de crear un archivo por lotes para extraer recursivamente múltiples archivos en múltiples subdirectorios desde un directorio de origen a un directorio de salida mientras mantengo la estructura de la carpeta de archivos. El siguiente ejemplo funciona perfectamente EXCEPTO que necesito extraer solo un tipo de archivo específico de cada archivo (es decir, .txt., .Doc, .pdf, etc.) ¿Qué necesito cambiar para que esto funcione?

@ECHO ON

SET source=C:\Users\user\Desktop\test
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.zip"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*"
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.7z"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*"
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.rar"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*"
PAUSE

Sinceramente aprecio la ayuda de antemano, y cualquier recurso completo sobre scripts por lotes al que pueda dirigirme para futuras referencias también sería muy apreciado, ya que estoy tratando de aprender.

MorbidEden
fuente
@Worthwelle: Esto dice ventanas archivo por lotes no linux shell-script . # es no un carácter de comentario válido. En su lugar, o bien utilice el REM comando, o comience la línea con :: (o simplemente puede eliminar las líneas ofensivas).
3D1T0R
Sí, me las arreglé para confundirme. Intentemos esto de nuevo: Si solo necesitas extraer *.7z archivos, entonces usted puede comentar (utilizando :: o REM ) o quitar el primero y el tercero FOR Bucles (lineas 4 y 6).
Worthwelle
Mis disculpas. Debería haberme redactado mejor. Quiero cada extensión de archivo como anteriormente, pero lo que necesito es de cada archivo para extraer solo un tipo de archivo, es decir, .txt, .doc, etc.
MorbidEden

Respuestas:

1

Puedes usar el -i cambiar con 7-Zip para esto. Como ejemplo, la siguiente modificación de su archivo por lotes solo se extraerá .txt archivos.

@ECHO ON

SET source=C:\Users\user\Desktop\test
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.zip"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.7z"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.rar"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"C:\Users\user\Desktop\Working\Custom Textures\*" -ir!*.txt
PAUSE

Aquí hay más información de la documentación :

-i (Incluir nombre de archivo) cambiar

Especifica adicionalmente incluir nombres de archivo y comodines.

Se admiten múltiples interruptores de inclusión.

Sintaxis

-i[<recurse_type>]<file_ref>

<recurse_type> ::= r[- | 0]
<file_ref> ::= @{listfile} | !{wildcard}

Parámetros

<recurse_type>

Especifica cómo se deben usar los comodines y los nombres de archivo en este interruptor. Si no se da esta opción, entonces el valor global, asignado por   Se utilizará el interruptor -r (Recurse). Para más detalles ver   Especificación del interruptor -r (Recurse).

<recurse_type> ::= r[- | 0]

<file_ref>

Especifica los nombres de archivo y los comodines, o un archivo de lista, para los archivos que se procesarán.

<file_ref> ::= @{listfile} | !{wildcard}

Option        Description
{listfile}    Specifies name of list file. See List file description.
{wildcard}    Specifies wildcard or filename.

Ejemplos

7z a -tzip src.zip *.txt -ir!DIR1\*.cpp

agrega a src.zip archivar todos los archivos * .txt del directorio actual y todos   * .cpp archivos del directorio DIR1 y de todos sus subdirectorios.

Worthwelle
fuente
¡Perfecto! Muchas gracias.
MorbidEden