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üsselwort DO
) genau einmal ausgeführt , wobei dem %i
Parameter 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 test
oben 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.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:
- Durchlaufen Sie jede Datei in einem bestimmten Verzeichnis (durchlaufen Sie sie).
- Fügen Sie für jede angegebene Datei eine .7z-Datei ein, indem Sie das
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
und pause
sind bewährte Methoden, sodass Sie sie belassen können. Und Sie möchten diese cd
Anweisung 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
PATH
Umgebungsvariablen enthalten? (Überprüfen Sie dies, wie oben erwähnt, mit echo %PATH%
einer cmd
Eingabeaufforderung.)