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.
Antworten:
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.)
Befehlszeile
Weitere Ressourcen
quelle
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
IN
hier ist(C:\Users\MVD21\Desktop\test)
. Dadurch wird die Schleife "body" (die Aktion hinter dem SchlüsselwortDO
) genau einmal ausgeführt , wobei dem%i
Parameter der Wert zugewiesen wirdC:\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 (dastest
oben erwähnte Verzeichnis), muss sie sich in derPATH
(in der%PATH%
Umgebungsvariablen; versuchen Sie esecho %PATH%
in einer Shell, um zu sehen, auf was sie aktuell eingestellt ist) befinden. Andernfalls müssen Sie7z.exe
in 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:
7z
Dienstprogramm 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 %%f
zu 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 on
undpause
sind bewährte Methoden, sodass Sie sie belassen können. Und Sie möchten diesecd
Anweisung wahrscheinlich auch beibehalten , wenn sich Ihre Dateien in diesem Pfad befinden.Was lässt uns das?
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:
PATH
Umgebungsvariablen enthalten? (Überprüfen Sie dies, wie oben erwähnt, mitecho %PATH%
einercmd
Eingabeaufforderung.)quelle