Batch Automatisches Packen von Backup Dateien

Osik

Cadet 3rd Year
Registriert
Juni 2009
Beiträge
58
Folgende Situation:



Meine Aufgabe ist jetzt die Unterordner 20090602 etc automatisch zu zippen und wenn die zips vorhanden sind die alten Ordner löschen.
Ich hoffe man erkennt das die nur ein beispielpfad darstellen soll.
Also die Struktur ist für Signatur_02 genau die gleiche (arc->2009x(jahr+monat)->20009x(tag))
Die Zip Dateien sollen den gleichen Namen wie die Ordner haben. Und die batch soll halt nur die Unterordner raussuchen.

Ich muss gestehen das ich davon eigentlich noch gar keine große Ahnung habe :/
Hab mit nem Arbeitskollegen versucht das über ne Auflistung zu Regeln, was allerdings nicht geklappt hat.
Mit dem Delete Befehl hab ich mich noch gar nicht beschäftigt da das bisherige schon über nen Tag gedauert hat und ich mir sicher bin, das das für jemanden mit nem Händchen für Batch Datein gar keine große Aufgabe ist.
Genutz werden muss Firmenbedingt 7-Zip.
Später soll diese Batch dann täglich immer nen Backup ziehen bzw die Vorhandenen Daten Zippen.
Bisheriger Ansatz:

@echo off

dir /b /S /ad >pfad.txt

FOR /f %%f IN (pfad.txt) DO 7z.exe a %%f.zip %%f

pause
 
Welche Programmiersprachen kannst du denn? Denn wenn du Batch-Scripting kannst ist das natürlich schwer ,)
 
mit programmieren hab ich bisher noch keine erfahrungen gemacht.
bin grad noch ganz am anfang der ausbildung, daher ist die aufgabe schon ein wenig knackig.
 
Knackig nicht - ist recht einfach. Aber bevor man Programmiert überlegt man sich genau was das Programm Schritt für Schritt machen soll. Dann Programmiert man das Vorgehen mit einer beliebigen Programmiersprache.

Unter Windows bietet es sich an mit einer .NET Kompatiblen Sprache das zu machen, du kannst das natürlich auch als Batch-Script, PHP Script oder sogar Python oder Perl machen.

Für den Einstieg eignet sich PHP eigentlich ganz gut, da es sehr viele Beispiele gibt und der Syntax (subjektiv gesehen) sehr einfach Strukturiert ist :)
 
Sieht eigentlich gut aus Bunard, problem ist hierbei aber genau wie bisher das er nur ein Archiv packt wo dann alle ordner drin sind.
Mein Ziel ist es ja die gesamten Tagesordner einzeln zu packen und diese dann im Monatsordner zu haben.

Hab nochmal in der Grafik verdeutlich welcher Ordner für was steht :)

 
Hallo,

vielleicht kann dir dieses Tool weiterhelfen.

Ich benutze es seit einiger Zeit, da ich was suchte um auch über FTP sichern zu können, und bin sehr zufrieden damit.
 
@echo off
dir /b /ad >pfad.txt
FOR /f %%f IN (pfad.txt) DO 7z.exe a %%f.zip %%f
FOR /f %%f IN (pfad.txt) ECHO if exist %%f.zip rd /S /Q %%f
pause
ich habe mal beim DIR das /S rausgenommen, da es mit Unterordnern nicht wirklich funktioniert
anschliessend wird gezippt und danach überprüft, ob zum Ordner auch die ZIP existiert
wenn ja, wird der Ordner inkl. Unterordnern gelöscht
hat zumindest bei mir unter XP ohne Probleme funktioniert

ist vielleicht nicht ganz sauber und man kann es sicherlich auch noch optimieren
 
Zuletzt bearbeitet:
das sieht schonmal sehr vielversprechend aus :)

ich wollte es jetzt noch so anpassen das er sich die 7zip exe aus dem pfad heraus nimmt:

@echo off
dir /b /ad >pfad.txt
FOR /f %%f IN (pfad.txt) DO C:\Programme\7Zip\7z.exe a %%f.zip %%f
FOR /f %%f IN (pfad.txt) ECHO if exist %%f.zip rd /S /Q %%f
pause

so klappt das allerdings nicht.
außerdem will er bei mir irgendwie nix löschen :S
warum weiß ich allerdings nicht.
 
wenn er wirklich löschen soll, dann muss das ECHO weg:
@echo off
dir /b /ad >pfad.txt
FOR /f %%f IN (pfad.txt) DO C:\Programme\7Zip\7z.exe a %%f.zip %%f
FOR /f %%f IN (pfad.txt) DO if exist %%f.zip rd /S /Q %%f
pause
 
Zuletzt bearbeitet:
mhm

ich weiß nicht warum, aber aus irgendeinen grund löscht der bei mir immer noch nix.
Willst du mir kurz erklären was die /S /Q Befehle noch bedeuten.
Außerdem hat mich das rd gewundert, eigentlich ist doch "d" der delete befehl bei 7zip.

Danke schonmal für deine großartige Hilfe! :)
 
dir /b /ad >pfad.txt
listet im aktuellen Ordner alle enthaltenen Ordner ohne Dateien und ohne Unterordner auf und schreibt das Ergebnis in die Datei pfad.txt

FOR /f %%f IN (pfad.txt) DO ...
für jede Zeile in der pfad.txt mache ...

... C:\Programme\7Zip\7z.exe a %%f.zip %%f
nehme 7z und zippe die Ordner

... if exist %%f.zip rd /S /Q %%f
wenn die für den Ordner eine gleichnamige .zip existiert, dann lösche den Ordner

RD /S /Q löscht einen Ordner inkl. aller enthaltenen Dateien und Unterordner

ich habe übrigens bei der 2. FOR-Schleife das DO vergessen gehabt und daher hat das Löschen nicht funktioniert
das habe ich aber oben nun korrigiert
 
so hab den fehler gefunden:

@echo off
dir /b /ad >pfad.txt
FOR /f %%f IN (pfad.txt) DO "C:\Programme\7Zip\7z.exe" a %%f.zip %%f
FOR /f %%f IN (pfad.txt) do if exist %%f.zip rd /S /Q %%f
del pfad.txt
del backup.bat
pause

das fehlende Do hat den fehler verursacht
jetzt bastel ich mir nur noch ne batch die die batch dann in die ordner schiebt :)

bleibt mir nur noch zu sagen danke danke danke danke :)
Ergänzung ()

Sooo

fertig ist das Ding:

@echo off
dir /b /ad >pfade.txt
REM FOR /f %%f IN (pfade.txt) DO dir %%f /b /ad >>pfade.txt

echo @echo off >>bat.bat
echo dir /b /ad ^>pfade.txt >>bat.bat
echo FOR /f %%%%f IN (pfade.txt) DO "C:\Programme\7Zip\7z.exe" a %%%%f.zip %%%%f >>bat.bat
echo FOR /f %%%%f IN (pfade.txt) DO if exist %%%%f.zip rd /S /Q %%%%f >>bat.bat


FOR /f %%f IN (pfade.txt) DO COPY bat.bat %%f
ping /n 2 localhost > NUL
del bat.bat
cls

FOR /f %%f IN (pfade.txt) DO if exist pfade.txt (
cd %%f
call bat.bat
del pfade.txt
del bat.bat
cd..
)
del pfade.txt

Danke nochmal an -Iwan- für die tatkräftige Unterstützung!

Lg
 
Zurück
Oben