Wie erstelle ich eine Batchdatei um Dateien per ZipCentral zu zippen. Bestehende Archive sollen mit neuen Dateien ergänzt werden. Archive sollen mit Teilen von Dateinamen bezeichnet werden.
Hallo Miteinander,
ich würde mich freuen wenn Ihr mich so bald wie möglich unterstützen könntet da das Problem für mich sehr kniffelig ist.
Vielen Dank
Also mein Problem ist Folgendes:
Ich möchte gern über eine Batch aus verschiedenen Dateien ein Zip-Archiv erstellen. Die Daten sehen so nach diesem Schema aus 01-20090703-9088.mdb Die erste Zahlreihe steht für eine Firmen-ID die zweite für das Datum der Erstellung und das dritte ist eine fortlaufende Nummer.
Ich habe zum Test schon mal etwas zusammengeschrieben:
rem Variable die den aktuellen Tag wieder gibt und dazu die Firmen ID (BSp.: 01-090703) modbez steht für Modulbezeichnung
set modbez=01-%date:~-2,4%%date:~-7,2%%date:~-10,2%
rem Quelle des Kopiervorgang
set source=C:\TEST\%modbez%*
rem ziel des Kopiervorgangs (destination)
set dest=Z:\Test \%modbez%
rem ---------------------------------------------------------------------------------------------------------------------
xcopy "%source%" "%dest%" /A /C /H /O /R /Y /D /I
Ich kopiere die Daten quasi von A nach B und erstelle für jeden Tag einen Ordner.
Das Problem dabei ist nur 1. nicht weiß wie ich die Daten zippen kann und 2. das ich nicht weiß wie ich definieren kann, das wenn die Batch durchläuft erkannt wird das diese 01-20090703-001.mdb zu dem dem Zip-Archiv 01-200907 gehört. Das Zip-Archiv muss quasi bei jedem Durchlauf ergänzt werden. Die Daten werden nicht alle an einem Tag erstellt sondern müssen immer wieder geprüft und verglichen werden.
Ich hoffe das war soweit verständlich falls nicht bitte nachhaken.
Komme bei dem Fall überhaupt nicht mehr weiter.
Grüße
D3ns!007
ich würde mich freuen wenn Ihr mich so bald wie möglich unterstützen könntet da das Problem für mich sehr kniffelig ist.
Vielen Dank
Also mein Problem ist Folgendes:
Ich möchte gern über eine Batch aus verschiedenen Dateien ein Zip-Archiv erstellen. Die Daten sehen so nach diesem Schema aus 01-20090703-9088.mdb Die erste Zahlreihe steht für eine Firmen-ID die zweite für das Datum der Erstellung und das dritte ist eine fortlaufende Nummer.
Ich habe zum Test schon mal etwas zusammengeschrieben:
rem Variable die den aktuellen Tag wieder gibt und dazu die Firmen ID (BSp.: 01-090703) modbez steht für Modulbezeichnung
set modbez=01-%date:~-2,4%%date:~-7,2%%date:~-10,2%
rem Quelle des Kopiervorgang
set source=C:\TEST\%modbez%*
rem ziel des Kopiervorgangs (destination)
set dest=Z:\Test \%modbez%
rem ---------------------------------------------------------------------------------------------------------------------
xcopy "%source%" "%dest%" /A /C /H /O /R /Y /D /I
Ich kopiere die Daten quasi von A nach B und erstelle für jeden Tag einen Ordner.
Das Problem dabei ist nur 1. nicht weiß wie ich die Daten zippen kann und 2. das ich nicht weiß wie ich definieren kann, das wenn die Batch durchläuft erkannt wird das diese 01-20090703-001.mdb zu dem dem Zip-Archiv 01-200907 gehört. Das Zip-Archiv muss quasi bei jedem Durchlauf ergänzt werden. Die Daten werden nicht alle an einem Tag erstellt sondern müssen immer wieder geprüft und verglichen werden.
Ich hoffe das war soweit verständlich falls nicht bitte nachhaken.
Komme bei dem Fall überhaupt nicht mehr weiter.
Grüße
D3ns!007
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 119693
Url: https://administrator.de/contentid/119693
Ausgedruckt am: 25.11.2024 um 12:11 Uhr
19 Kommentare
Neuester Kommentar
Hi,
Zu 1:
du kannst mit den IZarc Commandline (http://www.izarc.org/download.html) via Batch ein Zip-Datei erstellen lassen und dieses Archiv auch dann erweitern.
Folgende Parameter stehen dabei zur Auswahl:
izarcc [-commands] [-options] archivefile [@list] [files...]
Commands:
a : add files to archive (default action)
u : update files to archive
m : move files to archive (files only)
d : delete files from archive
r : recurse into subfolders (include subfolders)
p|P : store relative pathnames|store full pathnames
c<0|f|n|x|b> : set the compression level (0 - store; f - fast;
n - normal; x - maximum; b - maximum (bzip2)
e<0..2> : set encryption method (with password for ZIP, BH or JAR)
0 - default Zip 2; 1 - AES-128bit; 2 - AES-256bit
s<password> : specify a password
o : change the archive's date to the newest
file's date in archive
w : include system and hidden files
$<directory> : set custom temp directory
@list : compress the files listed in specified list
x<file> : exclude specified file from the compression process
x@list : exclude the files listed in specified list
Zu 1:
du kannst mit den IZarc Commandline (http://www.izarc.org/download.html) via Batch ein Zip-Datei erstellen lassen und dieses Archiv auch dann erweitern.
Folgende Parameter stehen dabei zur Auswahl:
izarcc [-commands] [-options] archivefile [@list] [files...]
Commands:
a : add files to archive (default action)
u : update files to archive
m : move files to archive (files only)
d : delete files from archive
r : recurse into subfolders (include subfolders)
p|P : store relative pathnames|store full pathnames
c<0|f|n|x|b> : set the compression level (0 - store; f - fast;
n - normal; x - maximum; b - maximum (bzip2)
e<0..2> : set encryption method (with password for ZIP, BH or JAR)
0 - default Zip 2; 1 - AES-128bit; 2 - AES-256bit
s<password> : specify a password
o : change the archive's date to the newest
file's date in archive
w : include system and hidden files
$<directory> : set custom temp directory
@list : compress the files listed in specified list
x<file> : exclude specified file from the compression process
x@list : exclude the files listed in specified list
Zu Punkt 2
Verstehe ich nicht ganz :D
Kannst auf jeden fall den Namen Auslesen und einen Teilstring auf die ersten 9 Stellen machen machen
set filename=01-20090703-001.mdb /den Namen würdest du ja aus dem verzeichniss auslesen
set name=%str:~0,9%
dann mit der Variable %modbez% vergleichen und wenn die übereinstimmen mit ins Archiv packen .... so hättest du zumindest die Zuordnung für das Beispiel oben ...
Verstehe ich nicht ganz :D
Kannst auf jeden fall den Namen Auslesen und einen Teilstring auf die ersten 9 Stellen machen machen
set filename=01-20090703-001.mdb /den Namen würdest du ja aus dem verzeichniss auslesen
set name=%str:~0,9%
dann mit der Variable %modbez% vergleichen und wenn die übereinstimmen mit ins Archiv packen .... so hättest du zumindest die Zuordnung für das Beispiel oben ...
Hallo D3ns!007,
willkommen im Forum.
Wenn im Quelldateinamen alle Informationen (bis auf den Zielpfad) enthalten sind, brauchst du doch nur eine for Schleife die alle Dateien im Quellverzeichnis abklappert und aus den ersten 9 Stellen des Datenbanknamens das Archiv bildet.
Da du 7zip schon installiert hast sollte dies funktionieren (ungetestet)
Mit der u = Update Option kannst du die Batchdatei beliebig oft laufen lassen da nur geänderte Dateien ins Archiv geschrieben werden.
Gruß
LotPings
Edit: Wenn die Ausgabe korrekt erscheint, das Echo am Anfang von Zeile 14 entfernen. Anführungszecihen ergänzt.
willkommen im Forum.
Wenn im Quelldateinamen alle Informationen (bis auf den Zielpfad) enthalten sind, brauchst du doch nur eine for Schleife die alle Dateien im Quellverzeichnis abklappert und aus den ersten 9 Stellen des Datenbanknamens das Archiv bildet.
Da du 7zip schon installiert hast sollte dies funktionieren (ungetestet)
Mit der u = Update Option kannst du die Batchdatei beliebig oft laufen lassen da nur geänderte Dateien ins Archiv geschrieben werden.
@Echo off
rem Quelle des Kopiervorgang
set "source=C:\TEST\"
rem ziel des Kopiervorgangs (destination)
set "dest=Z:\Test\"
Pushd "%source%"
For /F "Delims=" %%A in ('Dir /B/A-D "??-*.mdb"') Do call :ZipIt "%%~fA"
Popd
pause
Goto :Eof
:ZipIt
Set "Zip=%~n1"
Set "Zip=%Dest%%Zip:~0,9%.zip"
Echo 7z.exe u "%Zip%" %1
Gruß
LotPings
Edit: Wenn die Ausgabe korrekt erscheint, das Echo am Anfang von Zeile 14 entfernen. Anführungszecihen ergänzt.
<OT>
*seufz*
Ist eventuell mehrheitlich gewünscht, dass ich für die deutschen Worte mit der Endung "-niss" einen eigenen running gag counter initialisiere?
Ich hab eigentlich schon genug Aufwand mit diesem Umbenams-Dingens.
Sagen wir so: Ergebnisse, Hindernisse, Verzeichnisse, Hornisse lasse ich ja gelten, aber für den Singular wären mir folgende Synonyme lieber:
- die Verzeichnisse - der einzelne Ordner
- die Hindernisse - die einzelne Hürde
- die Ergebnisse - das einzelne Resultat
- die Hornisse - die einzelne Faltenwespe
etc
</OT>
Ich mach jetzt besser Wochenende...
Grüße
Biber
den Namen würdest du ja aus dem verzeichniss auslesen ...
*seufz*
Ist eventuell mehrheitlich gewünscht, dass ich für die deutschen Worte mit der Endung "-niss" einen eigenen running gag counter initialisiere?
Ich hab eigentlich schon genug Aufwand mit diesem Umbenams-Dingens.
Sagen wir so: Ergebnisse, Hindernisse, Verzeichnisse, Hornisse lasse ich ja gelten, aber für den Singular wären mir folgende Synonyme lieber:
- die Verzeichnisse - der einzelne Ordner
- die Hindernisse - die einzelne Hürde
- die Ergebnisse - das einzelne Resultat
- die Hornisse - die einzelne Faltenwespe
etc
</OT>
Ich mach jetzt besser Wochenende...
Grüße
Biber
Hallo bastla,
pushd braucht nicht unbedingt Anführungszeichen,
aber es kann natürlich nicht automatisch source in Quelle übersetzen
Danke für den Hinweis, wird geändert.
Schönes WE!
Gruß
LotPings
pushd braucht nicht unbedingt Anführungszeichen,
aber es kann natürlich nicht automatisch source in Quelle übersetzen
Danke für den Hinweis, wird geändert.
Schönes WE!
Gruß
LotPings
Das Problem liegt mit großer Wahrscheinlichkeit daran, dass 7Z.exe nicht gefunden wird.
Ergänze in in Zeile 14 mal 7Z.exe um den kompletten Pfad zur Exe-Datei.
Ergänze in in Zeile 14 mal 7Z.exe um den kompletten Pfad zur Exe-Datei.
Setze bitte den Code in Tags, siehe Formatierungshilfe.
Source darf nur den ORDNERpfad enthalten und keine komplette Pfadangabe zu einer Datei, und erst recht keine Wildcard-Zeichen.
Source darf nur den ORDNERpfad enthalten und keine komplette Pfadangabe zu einer Datei, und erst recht keine Wildcard-Zeichen.
Ja. Und jetzt noch den Pfad zu 7z.exe in Zeile 19 ergänzen (und das Echo wegnehmen, wenn es funktioniert)