Verwenden einer Batchdatei zum Komprimieren von Dateien als einzelne ZIP-Dateien

10

Ich versuche also, 7zip in einer Batch-Datei zu verwenden, um die Dateien in einem Ordner als einzelne Dateien zu komprimieren. Die erste Datei erhält also ein eigenes Zip-Archiv und die nächste und so weiter. Ich habe im Internet gesucht und verschiedene Codes ausprobiert. Bisher habe ich es nur erfolgreich geschafft, sie als einzelne Zip-Datei zu komprimieren und auf meinem Desktop auszugeben.

Leider habe ich den Code verloren, der das getan hat, und jetzt bin ich dabei geblieben, was anscheinend nichts zu tun hat.

@echo on
cd "C:\Users\MVD21\Desktop\test"
FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"
pause

Ich möchte, dass jede Datei ein eigenes Zip-Archiv hat und dass das Zip-Archiv den Namen der Datei teilt, natürlich ohne die Erweiterung.

Jede Hilfe wird sehr geschätzt.

Mike Van Dunk
quelle
Auch wenn es eine einfachere Möglichkeit gibt, dies mit der integrierten Zip-Funktion unter Windows 10 zu tun, wäre dies ebenfalls in Ordnung.
Mike Van Dunk

Antworten:

4

Ich möchte, dass jede Datei ein eigenes Zip-Archiv hat und dass das Zip-Archiv den Namen der Datei teilt, natürlich ohne die Erweiterung.

Batch-Skript

(Legen Sie die vollständigen expliziten Ordner- und Zielordnerpfade oben fest und führen Sie sie dann nach Bedarf aus. In der Quelle befinden sich die Dateien, die Sie komprimieren möchten, und im Ziel möchten Sie die Dateien komprimieren.)

@ECHO ON

SET SourceDir=C:\folder\source
SET DestDir=C:\folder\destination

CD /D "C:\Program Files\7-Zip"
FOR /F "TOKENS=*" %%F IN ('DIR /B /A-D "%SourceDir%"') DO (
    7z.exe a "%DestDir%\%%~NF.zip" "%SourceDir%\%%~NXF"
)
EXIT

Befehlszeile

FOR /F "TOKENS=*" %F IN ('DIR /B /A-D "C:\Folder\Source"') DO 7z.exe a "C:\Folder\Dest\%~NF.zip" "C:\Folder\Source\%~NXF"

Weitere Ressourcen

Zuhälter Saft IT
quelle
4

Ihr ursprüngliches Skript führt zeilenweise Folgendes aus:

@echo on

Weist die Eingabeaufforderung an, jeden Befehl in der Batchdatei zurückzudrucken, bevor er ausgeführt wird. Dies ist nur so, dass Sie "sehen" können, was es wirklich tut, bevor es es tut.

cd "C:\Users\MVD21\Desktop\test"

C Hang D irectory in dem, was ich hoffe , dass der Weg ist , wo Sie wollen , dass alle Dateien zippen.

FOR %%i IN (C:\Users\MVD21\Desktop\test) DO 7z.exe a "%~ni.7z" "%i"

Der Parameter zum INhier ist (C:\Users\MVD21\Desktop\test). Dadurch wird die Schleife "body" (die Aktion hinter dem Schlüsselwort DO) genau einmal ausgeführt , wobei dem %iParameter der Wert zugewiesen wird C:\Users\MVD21\Desktop\test. Es ist keine Überraschung, dass dies nicht das tut, was Sie wollen! Es sieht so aus, als würde dies das gesamte Verzeichnis in eine einzelne .7z-Datei komprimieren.

Wenn es nichts tut , liegt es wahrscheinlich daran, dass es den Weg von nicht finden kann 7z.exe. Wenn sich diese Datei nicht im aktuellen Verzeichnis befindet (das testoben erwähnte Verzeichnis), muss sie sich in der PATH(in der %PATH%Umgebungsvariablen; versuchen Sie es echo %PATH%in einer Shell, um zu sehen, auf was sie aktuell eingestellt ist) befinden. Andernfalls müssen Sie 7z.exein das aktuelle Verzeichnis kopieren oder einen absoluten Pfad angeben, zu dem es sich befindet (z. B. "C:\Program Files\7-zip\7z.exe" ...).

pause

Wenn das Skript fertig ist, weist dieses Schlüsselwort die Shell lediglich an, darauf zu warten, dass Sie die Eingabetaste drücken oder schließen, anstatt sie sofort zu beenden.


Wenn Sie ein Batch-Skript erstellen (oder in der Tat alles andere, was sich mit Code befasst), sollten Sie aufhören, das gesamte Skript als monolithisches Kopieren und Einfügen zu behandeln, das Sie nicht verstehen (zu verstehen), und stattdessen Ihr Skript aufteilen Problem in Unterteile, die Sie einzeln herausfinden können, dann haken Sie sie zusammen. Auf diese Weise können Sie Probleme unabhängig lösen und Lösungen erstellen , anstatt jemanden zu bitten, Ihre gesamte Arbeit für Sie zu erledigen. Ich empfehle es sehr.

In Ihrem Fall haben Sie die folgenden Unterkomponenten Ihres Problems:

  1. Durchlaufen Sie jede Datei in einem bestimmten Verzeichnis (durchlaufen Sie sie).
  2. Fügen Sie für jede angegebene Datei eine .7z-Datei ein, indem Sie das 7zDienstprogramm aufrufen .

Die Wahrscheinlichkeit, dass jemand bereits eine Antwort hat, die Ihr spezifisches Bedürfnis löst, ist geringer als die Chance, die allgemeineren Stücke einzeln zu finden.

Diese Frage "Wie man mit jeder Datei in einem Verzeichnis in einem Batch-Skript etwas macht" löst die Hälfte Ihres Problems.

Der Kern der Antwort ist, dass Sie mit diesem Teil von dieser StackOverflow-Antwort beginnen:

for /f "usebackq delims=|" %%f in ('dir /b "c:\program files"') do echo %%f

und ändern Sie den Teil, in dem es etwas tut, um das echo %%fzu tun, was Sie tun möchten . Ich weiß, dass Sie diesen Teil ändern müssen, da ich den Text des Skripts analysiert und verstanden habe, was jedes Zeichen und jeder Parameter bedeutet, damit ich überlegen kann, wo ich meinen eigenen Code einfügen möchte.

Hier ist ein "Luftcode" (ungetestet!):

for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~ni.7z" "%i"

Die obigen Anweisungen @echo onund pausesind bewährte Methoden, sodass Sie sie belassen können. Und Sie möchten diese cdAnweisung wahrscheinlich auch beibehalten , wenn sich Ihre Dateien in diesem Pfad befinden.

Was lässt uns das?

@echo on
cd "C:\Users\MVD21\Desktop\test"
for /f "usebackq delims=|" %%f in ('dir /b "C:\Users\MVD21\Desktop\test"') do 7z.exe a "%~nf.7z" "%f"
pause

Wenn Sie mit "Es funktioniert nicht!" Antworten, werde ich Ihnen NICHT helfen. Wenn Sie dies versuchen und es nicht funktioniert, Sie MÜSSEN mir sagen , in den Kommentaren die folgenden Informationen:

  • Welche genaue Fehlermeldung erhalten Sie in der Eingabeaufforderung, wenn Sie diese Befehle ausführen oder in eine Batchdatei einfügen und ausführen? Nicht abkürzen; Kopieren Sie die Ausgabe und fügen Sie sie direkt ein (stellen Sie sie auf http://pastebin.com, wenn es viel ist).
  • Was Sie denken , wird die Fehlermeldung Ihnen sagt , dass das Problem ist?
  • Wo befindet sich Ihre 7-zip-Installation (der Dateipfad)?
  • Ist der Dateispeicherort Ihrer 7-zip-Installation im Inhalt der PATHUmgebungsvariablen enthalten? (Überprüfen Sie dies, wie oben erwähnt, mit echo %PATH%einer cmdEingabeaufforderung.)
allquixotic
quelle
Ich glaube nicht, dass dies funktioniert, weil ich 7zip auf einem anderen Laufwerk installiert habe. Es scheint zu funktionieren, wenn ich die CD "Location of 7zip" wie in der ursprünglichen Antwort mache. Das funktioniert natürlich nur "manchmal". Es hat funktioniert, bis ich eine weitere Echo-Anweisung darunter eingefügt habe, und jetzt ist es nicht mehr so. Und ja, ich versuche mehr über Batch-Dateien zu verstehen. Ich habe versucht, ein Glossar mit Batch-Befehlen zu finden oder was ich nicht studieren soll, damit ich es tatsächlich verstehe. Vertrauen Sie mir, ich würde es lieber verstehen UND es funktionieren lassen, als es nur funktionieren zu lassen.
Mike Van Dunk
Ich habe Ihre Lösung ausprobiert und kann Ihnen nicht sagen, wie die Ausgabe lautet, da die Batchdatei überhaupt nicht ausgeführt wird. Es öffnet sich kurz mit blinkendem cmd-Fenster und schließt sich dann wieder. Ja, ich habe die Pause da drin. Ich habe 7zip sowohl auf meinem lokalen Laufwerk als auch auf einem sekundären internen Laufwerk installiert, aber es scheint nicht Teil der Pfadumgebung zu sein
Mike Van Dunk
Ich würde es wirklich gerne verstehen, aber die Suche bei Google hilft nicht viel. Zum Beispiel habe ich keine Ahnung, was dieser Befehl oder Parameter "'dir / b" ist oder was er tut. Ich weiß, dass dir offensichtlich ein Verzeichnis ist, aber ich weiß nicht, was das / b ist. Ich möchte, dass jemand erklärt, was die Parameter tun, damit ich sie besser verstehen kann. Oder wenn jemand einen Link zu einer Site hat, auf der er solche Dinge durchgeht, wäre das ebenfalls hilfreich. Ich habe 'dir / b in einer Batch-Datei gegoogelt und konnte nichts wirklich finden. Ich denke, das / b hat etwas mit den Dateinamen zu tun, bin mir aber nicht sicher.
Mike Van Dunk