Arquivo em lote FOR Loop 7-zip extrair extensão de arquivo específica

0

Estou tentando criar um arquivo em lote para extrair recursivamente vários arquivos em vários subdiretórios de um diretório de origem para um diretório de saída, mantendo a estrutura da pasta de arquivamento. O exemplo abaixo funciona perfeitamente, EXCETO que eu preciso extrair apenas um tipo de arquivo específico de cada arquivo (por exemplo, .txt, .doc, .pdf, etc.) O que preciso alterar para que isso funcione?

@ECHO ON

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

Eu sinceramente agradeço a ajuda antecipadamente, e quaisquer recursos completos sobre roteiros em lote que eu possa ser direcionado para referências futuras também serão muito apreciados, como estou tentando aprender.

    
por MorbidEden 24.09.2018 / 23:02

1 resposta

1

Você pode usar a opção -i com o 7-Zip para isso. Como exemplo, a seguinte modificação do seu arquivo de lote irá extrair somente .txt arquivos.

@ECHO ON

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

Aqui estão mais algumas informações da documentação :

-i (Include filenames) switch

Specifies additional include filenames and wildcards.

Multiple include switches are supported.

Syntax

-i[<recurse_type>]<file_ref>

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

Parameters

<recurse_type>

Specifies how wildcards and file names in this switch must be used. If this option is not given, then the global value, assigned by the -r (Recurse) switch will be used. For more details see specification of the -r (Recurse) switch.

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

<file_ref>

Specifies filenames and wildcards, or a list file, for files to be processed.

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

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

Examples

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

adds to src.zip archive all *.txt files from current directory and all *.cpp files from directory DIR1 and from all it's subdirectories.

    
por 25.09.2018 / 00:01