Batch estrae i file da ogni archivio con 7-zip


3

Voglio usare questo codice in un lotto. Il primo passo è quello di inserire la cartella di origine che albero sarebbe simile a questo:

enter image description here

Quello che voglio ottenere è estrarre ogni tipo di archivio all'interno della cartella di origine nella stessa cartella in cui si trova l'archivio, ad es. "archive.zip" direttamente su "folder1".

Avere questo codice qui sotto ma non hanno alcuna idea di come impostare la variabile di destinazione.

SET /P "source="

FOR %%F IN ("%source%\*.zip") DO "C:\Program Files\7-Zip\7z.exe" x "%source%\%%~nF.zip"
FOR %%F IN ("%source%\*.7z") DO "C:\Program Files\7-Zip\7z.exe" x "%source%\%%~nF.7z"
FOR %%F IN ("%source%\*.rar") DO "C:\Program Files\7-Zip\7z.exe" x "%source%\%%~nF.rar"

Risposte:


2

Estrarre in modo ricorsivo dai file di archivio con 7Zip nella stessa cartella in cui si trova il file di archivio

Puoi usare il -o passare con 7Zip che specificherà il percorso completo della directory di output per il comando extract per estrarre il contenuto dei file di archivio applicabili.

Puoi usare a FOR / F loop con un ricorsivo DIR comando per iterare i percorsi di archivio completi e passarli a 7Zip di conseguenza usando le sostituzioni per farlo funzionare come ne hai bisogno.

Script batch

@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"%%~pF\"
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.7z"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"%%~pF\"
FOR /F "TOKENS=*" %%F IN ('DIR /S /B "%source%\*.rar"') DO "C:\Program Files\7-Zip\7z.exe" x "%%~fF" -o"%%~pF\"
EXIT

Ulteriori risorse

  • DIR
  • FOR / F

    Inoltre, la sostituzione di riferimenti variabili FOR è stata   migliorata. Ora puoi utilizzare la seguente sintassi opzionale:

    %~I         - expands %I removing any surrounding quotes (")
    %~fI        - expands %I to a fully qualified path name
    %~dI        - expands %I to a drive letter only
    %~pI        - expands %I to a path only
    %~nI        - expands %I to a file name only
    %~xI        - expands %I to a file extension only
    %~sI        - expanded path contains short names only
    %~aI        - expands %I to file attributes of file
    %~tI        - expands %I to date/time of file
    %~zI        - expands %I to size of file
    %~$PATH:I   - searches the directories listed in the PATH
                   environment variable and expands %I to the
                   fully qualified name of the first one found.
                   If the environment variable name is not
                   defined or the file is not found by the
                   search, then this modifier expands to the
                   empty string
    

Ciò funziona perfettamente, naturalmente - molte grazie per la spiegazione su come affrontare questo problema. BTW. hai idea del motivo per cui gli switch 7-zip -y (assumono sì su tutte le query) e -aoa (sovrascrivi tutti i file esistenti senza prompt) non funzionano e mi viene chiesto ogni volta cosa fare quando c'è un nome file conflitto?
Rayearth
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.