Batch File FOR Loop 7-zip-Extrakt-spezifische Dateierweiterung

624
MorbidEden

Ich versuche, eine Batchdatei zu erstellen, um mehrere Archive in mehreren Unterverzeichnissen rekursiv aus einem Quellverzeichnis in ein Ausgabeverzeichnis zu extrahieren, während die Archivordnerstruktur beibehalten wird. Das folgende Beispiel funktioniert einwandfrei, es sei denn, ich muss nur einen bestimmten Dateityp aus jedem Archiv extrahieren (z. B. .txt, .doc, .pdf usw.). Was muss ich ändern, damit dies funktioniert?

@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 

Ich freue mich aufrichtig über die Hilfe im Voraus, und ich würde mich sehr darüber freuen, wenn Sie mir bei zukünftigen Batch-Skripts gründliche Ressourcen für das Batch-Scripting zur Verfügung stellen würden.

0
@Worthwelle: Dies sagt [Tag: Windows] [Tag: Batch-Datei], nicht [Tag: Linux] [Tag: Shell-Skript]. `#` ist * kein * gültiges Kommentarzeichen. Verwenden Sie stattdessen den Befehl `REM` oder beginnen Sie die Zeile mit` :: `(oder löschen Sie einfach die fehlerhaften Zeilen). 3D1T0R vor 6 Jahren 0
Ja, ich habe es geschafft, mich selbst zu verwirren. Versuchen wir es noch einmal: Wenn Sie nur * .7z-Dateien extrahieren müssen, können Sie die Kommentare auskommentieren (mit `::` oder `REM`) oder die erste und dritte` FOR`-Schleife (Zeilen 4 und 6) entfernen. . Worthwelle vor 6 Jahren 0
Entschuldigen Sie. Ich hätte mich besser formulieren sollen. Ich möchte jede Archiverweiterung wie oben beschrieben, aber ich brauche nur aus einem Archiv, um nur einen Dateityp zu extrahieren, z. B. .txt, .doc usw. MorbidEden vor 6 Jahren 0

1 Antwort auf die Frage

1
Worthwelle

Sie können den -iSwitch dazu mit 7-Zip verwenden. Bei der folgenden Änderung Ihrer Stapeldatei werden beispielsweise nur .txtDateien extrahiert .

@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 

Hier einige weitere Informationen aus der Dokumentation :

-i (Include Dateinamen) umschalten

Gibt zusätzliche Include-Dateinamen und Platzhalterzeichen an.

Es werden mehrere Include-Schalter unterstützt.

Syntax

-i[<recurse_type>]<file_ref>  <recurse_type> ::= r[- | 0] <file_ref> ::= @ | ! 

Parameter

<recurse_type>

Gibt an, wie Platzhalter und Dateinamen in dieser Option verwendet werden müssen. Wenn diese Option nicht angegeben ist, wird der globale Wert verwendet, der vom Schalter -r (Recurse) zugewiesen wird. Weitere Einzelheiten finden Sie unter Angabe des Schalters -r (Recurse).

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

<file_ref>

Gibt Dateinamen und Platzhalterzeichen oder eine Listendatei für zu verarbeitende Dateien an.

<file_ref> ::= @ | !  Option Description Specifies name of list file. See List file description. Specifies wildcard or filename. 

Beispiele

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

fügt src.zip hinzu, um alle * .txt-Dateien aus dem aktuellen Verzeichnis und alle * .cpp-Dateien aus dem Verzeichnis DIR1 und allen seinen Unterverzeichnissen zu archivieren.

Perfekt! Vielen herzlichen Dank. MorbidEden vor 6 Jahren 0