Ordner zippen mit Batch
Hallo Leute,
hab da mal eine Frage
folgendermaßen stellt sich die Sache dar:
ich habe einen Ordner welcher mehrere Unterordner hat und in diesen Unterordnern sind mehrere .zip-Files.
Nun sollen diese .zip Files alle zu einer .zip File gezippt werden und diese .zip File dann in dem jeweiligen Unterordner abgespeichert werden. Und das alles mit Batch.
Ich hoffe trotz dieser komischen Erklärung könnt ihr mir weiterhelfen. ;)
Grüße
rubono
hab da mal eine Frage
folgendermaßen stellt sich die Sache dar:
ich habe einen Ordner welcher mehrere Unterordner hat und in diesen Unterordnern sind mehrere .zip-Files.
Nun sollen diese .zip Files alle zu einer .zip File gezippt werden und diese .zip File dann in dem jeweiligen Unterordner abgespeichert werden. Und das alles mit Batch.
Ich hoffe trotz dieser komischen Erklärung könnt ihr mir weiterhelfen. ;)
Grüße
rubono
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189290
Url: https://administrator.de/contentid/189290
Ausgedruckt am: 22.11.2024 um 15:11 Uhr
18 Kommentare
Neuester Kommentar
Hi,
nimm 7zip damit geht sowas auch unter Windows. Hier findest du sogar ein paar Beispiele:
http://www.dotnetperls.com/7-zip-examples
Gruß
-tobi
nimm 7zip damit geht sowas auch unter Windows. Hier findest du sogar ein paar Beispiele:
http://www.dotnetperls.com/7-zip-examples
Gruß
-tobi
Hallo rubono!
Wenn ich das richtig interpretiere, sollen also je Ordner die enthaltenen zip-Dateien zu einer einzigen zusammengefasst (und danach gelöscht?) werden.
Generell ginge das etwa so (ungetestet):
Es sollten jetzt alle Unterordner des angegebenen Startordners durchlaufen und alle darin befindlichen zip-Dateien zu einer einzigen Datei mit dem Namen des Ordners zusammengefasst und, bei Erfolg, danach gelöscht werden.
Wegen der beiden "
Ich habe hier auch mal unterstellt, dass zum Zippen "7zip" verwendet werden soll - den Pfad in Zeile 3 müsstest Du an Deine Gegebenheiten anpasssen ...
Grüße
bastla
[Edit]
Wenn ich das richtig interpretiere, sollen also je Ordner die enthaltenen zip-Dateien zu einer einzigen zusammengefasst (und danach gelöscht?) werden.
Generell ginge das etwa so (ungetestet):
@echo off & setlocal
set "Startordner=D:\Oberordner"
set "7z=%ProgramFiles%\7-zip\7z.exe"
for /d /r "%Startordner%" %%i in (*) do (
pushd "%%i"
echo Bearbeite "%%i"
if not exist "%%~ni.zip" (
echo "%7z%" a "%%~ni.zip" *.zip -mx0 && (
for /f "delims=" %%a in ('dir /b *.zip') do if /i "%%a" neq "%%~ni.zip" echo del "%%a"
)
)
popd
)
echo Fertig.
Wegen der beiden "
echo
" in den Zeilen 9 und 10 werden diese Aktionen allerdings zunächst nur angezeigt - wenn die entsprechenden Befehle ok aussehen, kannst Du diese "echo
" entfernen und den Batch damit "scharf" stellen.Ich habe hier auch mal unterstellt, dass zum Zippen "7zip" verwendet werden soll - den Pfad in Zeile 3 müsstest Du an Deine Gegebenheiten anpasssen ...
Grüße
bastla
[Edit]
%7z%
(für ev Installationspfad mit enthaltenen Leerzeichen) unter Anführungszeichen gesetzt [/Edit]
Hallo rubono!
eingeben, dann siehst Du nicht nur deren Inhalt, sondern auch, was es da noch so gibt), oder Du gibst den Pfad "hardcoded" an - dann aber ohne die Prozentzeichen ...
... und wenn Du schon am Bearbeiten des Batches bist, könntest Du zur Sicherheit auch noch in Zeile 9
Grüße
bastla
P.S.: Schön, dass Du nach der "Code"-Formatierung fragst - Du findest sie hier beschrieben ...
habe ich den Pfad für 7zip falsch angepasst?
Yep - entweder verwendest Du die auch eigentlich dafür gedachte Systemvariable "%ProgramFiles%" (einfach einmal in einer CMD-Shellset
... und wenn Du schon am Bearbeiten des Batches bist, könntest Du zur Sicherheit auch noch in Zeile 9
%7z%
unter Anführungszeichen setzen (ich hole das oben auch noch nach).Grüße
bastla
P.S.: Schön, dass Du nach der "Code"-Formatierung fragst - Du findest sie hier beschrieben ...
Hallo rubono!
Grüße
bastla
woran liegt das?
Vor allem daran, dass es keine gute Idee war, eine Variable %7z% zu nennen (und das Weglassen des Variablennamens, wie in Deiner Zeile 3, macht's auch nicht besser ) - versuch es nochmal mit dieser Version:@echo off & setlocal
set "Startordner=D:\Oberordner"
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe"
for /d /r "%Startordner%" %%i in (*) do (
pushd "%%i"
echo Bearbeite "%%i"
if not exist "%%~ni.zip" (
echo "%ZIPProg%" a "%%~ni.zip" *.zip -mx0 && (
for /f "delims=" %%a in ('dir /b *.zip 2^>nul') do if /i "%%a" neq "%%~ni.zip" echo del "%%a"
)
)
popd
)
echo Fertig.
bastla
Hallo rubono!
Grüße
bastla
wieso funktioniert es nicht mehr wenn ich den pfad so spezialisiere ?
Weil es dann keine gültige Pfadangabe ist - Du kannst es aber so versuchen: @echo off & setlocal
set "Startordner=D:\Ordner"
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe"
for /d /r "%Startordner%" %%i in ("*bestimmteOrdnernamen") do (
pushd "%%i"
echo Bearbeite "%%i"
if not exist "%%~ni.zip" (
"%ZIPProg%" a "%%~ni.zip" *.zip -mx0 && (
for /f "delims=" %%a in ('dir /b *.zip 2^>nul') do if /i "%%a" neq "%%~ni.zip" del "%%a"
)
)
popd
)
echo Fertig.
bastla
Hallo rubono!
Grüße
bastla
Jetzt löscht es die Dateien jedoch nicht mehr
Du hast beide *.zip
durch *.*
ersetzt?Ich muss jetzt ausserdem in dem Ordner "bestimmterOrdnername" in alle Unterordner rein dann dort die Dateien in den jeweiligen Unterordnern zippen und den Ordner löschen.
Sorry, verstehe ich nicht - welcher Ordner soll gelöscht werden?Grüße
bastla
Hallo rubono!
Das funktioniert so nur für eine Unterordnerebene ...
Grüße
bastla
Es soll der Unterordner aus welchem man die Dateien zippt gelöscht werden.
Dann muss aber die zip-Datei im Startordner gespeichert werden, um nicht mit dem Unterordner gelöscht zu werden - ungetestet etwa:@echo off & setlocal
set "Startordner=D:\Ordner\bestimmteOrdnernamen"
set "ZIPProg=%ProgramFiles%\7-zip\7z.exe"
pushd "%Startordner%"
for /d %%i in (*) do (
echo Bearbeite "%%i"
if not exist "%%~ni.zip" "%ZIPProg%" a "%%~ni.zip" "%%i\*.*" && rd "%%i"
)
popd
echo Fertig.
Grüße
bastla