Ich habe mehrere Zip-Dateien in einem Ordner. Jede Zip-Datei enthält eine Datei mit dem Namen exp_1.txt
. Ich möchte jede Zip-Datei entpacken und die extrahierte Datei aus jeder Zip-Datei in den Namen der Zip-Datei umbenennen.
Die Namen der Zip-Dateien folgen keinem Muster oder Datumsaufbau, sondern sind alle unterschiedlich. Ich habe herausgefunden, wie ich die exp_1.txt
Datei in dasselbe Verzeichnis wie die Zip-Datei extrahieren kann, kann aber nicht herausfinden, wie ich sie umbenennen kann, exp_1.txt
damit sie mit dem Namen der Zip-Datei übereinstimmt, aus der sie extrahiert wurde.
Noch einmal in weniger Worten: Aus TuesdayReport.zip
möchte ich die einzige Datei extrahieren exp_1.txt
und sie TuesdayReport.txt
im selben Verzeichnis wie in umbenennen TuesdayReport.zip
.
Derzeit verwende ich 7z x
zum Extrahieren der Datei in dasselbe Verzeichnis, in dem sich die ZIP-Datei befindet. Ich würde es vorziehen, dies aus einer Batchdatei ausführen zu können.
Antwort1
warum nicht die 7zip-Befehlszeilenversion verwenden, die Sie herunterladen können vonHier?
In dieser ZIP-Datei finden Sie eine Hilfedatei im CHm-Format mit allen Schaltern und Befehlen, die Ihnen bei Ihrem Batch-Prozess helfen können.
Antwort2
forfiles /M *.zip /C "cmd /c C:\PROGRA~1\7-Zip\7z.exe e @file & ren exp_1.txt @fname.txt"
Antwort3
exp_1.txt
Dadurch wird aus jeder ZIP-Datei im aktuellen Verzeichnis die Datei mit dem gleichen Namen wie die ZIP-Datei extrahiert, jedoch mit der folgenden Erweiterung txt
anstelle von :zip
for %a in (*.zip) do @(7z l "%~a" -ir!exp_1.txt |findstr exp_1.txt) && 7z e "%~a" -ir!exp_1.txt -so >"%~na.txt"
Dies kann direkt von der Kommandozeile aus ausgeführt werden. Wenn Sie es aus einem Batch ausführen möchten, müssen Sie%
Was es macht:
for
Schleife zählt jede Zip-Datei auf- Der erste
7z
Aufruf stellt zusammen mitfindstr
sicher, dass das Extrahieren nur ausgeführt wird/eine Datei nur erstellt wird, wenn das Archiv bestimmte Dateien enthält. - Der zweite
7z
Aufruf extrahiert die Datei tatsächlich in die Standardausgabe (-so
Schalter) und leitet stdout zu einer Datei mit dem gleichen Namen wie das Archiv (ohne Erweiterung) um. Der%~n
Modifikator weist cmd an, nur den Basisnamen (ohne Erweiterung) zu übernehmen.
Bitte beachten Sie, dass es zu unerwarteten Ergebnissen kommen kann, wenn sich im Archiv mehrere Dateien mit demselben Namen (in unterschiedlichen Verzeichnissen) befinden.
Wenn Sie es im Batch ausführen, würde ich auch vorschlagen, den Dateinamen als Variable festzulegen (vor der Schleife), um Wiederholungsfehler zu vermeiden (Sie müssen es im obigen Befehl dreimal eingeben).