d3ns007
Goto Top

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

Content-ID: 119693

Url: https://administrator.de/contentid/119693

Ausgedruckt am: 25.11.2024 um 12:11 Uhr

-ricardo-
-ricardo- 03.07.2009 um 14:07:50 Uhr
Goto Top
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
D3ns007
D3ns007 03.07.2009 um 14:44:15 Uhr
Goto Top
Danke für die schnelle Hilfe.

Könntest du mir das ganze vielleicht anhand meiner Frage zeigen weil mit dem izarcc komme ich nicht wirklich weiter. Habe mir jetzt auch mal 7-Zip installiert...
-ricardo-
-ricardo- 03.07.2009 um 14:46:58 Uhr
Goto Top
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 ...
D3ns007
D3ns007 03.07.2009 um 14:54:51 Uhr
Goto Top
Ok das heißt dann quasi:

If %filename%=%modbez%

Hier würde dann der Befehl stehen zu zu einem Archive hinzu oder erstelle neues (was ich aber nicht weiß)<<

else


Also es gibt ja einen Ordner für heute "01-20090703". Wie kann ich den Ordner zu einem Archiv machen? Und wenn ich sas Archiv habe wie vergleiche ich den Namen der Datei mit dem Archiv?

=> Kenne mich noch nicht so wirklich damit aus...
77559
77559 03.07.2009 um 15:30:22 Uhr
Goto Top
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.

@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.
Biber
Biber 03.07.2009 um 18:14:57 Uhr
Goto Top
<OT>
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
bastla
bastla 03.07.2009 um 19:02:32 Uhr
Goto Top
@77559
Ich schreibe ja lieber (nur für den Fall des Falles) etwa
Pushd "%Quelle%"
(und dann in diesem Fall auch noch eher "%source%" face-wink) - aber vielleicht bin ich hinsichtlich der Anführungszeichen auch nur ein wenig abergläubisch ...

Grüße
bastla
77559
77559 03.07.2009 um 19:36:05 Uhr
Goto Top
Hallo bastla,
pushd braucht nicht unbedingt Anführungszeichen,
aber es kann natürlich nicht automatisch source in Quelle übersetzen face-wink

Danke für den Hinweis, wird geändert.

Schönes WE!

Gruß
LotPings
bastla
bastla 03.07.2009 um 20:43:01 Uhr
Goto Top
@77559
War nur exemplarisch gemeint (wenn auch, zugegebener Maßen, mit "pushd" als falschem Exempel face-sad) ...

Auch Dir ein schönes WE
bastla
D3ns007
D3ns007 04.07.2009 um 11:46:53 Uhr
Goto Top
Hallor Miteinander,
erst mal vielen vielen Dank für die schnelle und kompetente Hilfe!

Ich werde die Anregungen anfang nächster Woche mal testen und Rückmeldung geben.

Grüße

D3ns!007
D3ns007
D3ns007 07.07.2009 um 09:33:08 Uhr
Goto Top
Guten Morgen,
ich habe jetzt den Quellcode von LotPings getestet, leider ohne Erfolg.

Die Meldung
"Datei nicht gefunden
Drücken Sie eine beliebige Taste..." wird ausgegeben.

Könnte mir bitte jemand die einzelnen Schritte erklären die der Code macht? Damit ich vielleicht selber darauf komme wo das Problem liegt.

Vielen Dank

D3ns!007
80220
80220 07.07.2009 um 11:30:57 Uhr
Goto Top
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.
D3ns007
D3ns007 07.07.2009 um 11:39:04 Uhr
Goto Top
Mhmm das glaube ich eher nicht da die Fehlermeldung ja kommt obwohl da ja
Rem ... steht, das heißt es würde bloß in der Console angezeigt aber nicht ausgeführt. (wenn ich das richtig sehe)

Hab den Tipp getestet: Dann kommt die mLdung in der Konsole:

"Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung
ist falsch.
Datei nicht gefunden
Drücken Sie eine beliebige Taste . . ."
D3ns007
D3ns007 07.07.2009 um 11:48:27 Uhr
Goto Top
Hier nochmal der aktuelle Quellcode:


@echo off

rem Variable die den aktuellen Tag wiedergibt 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:\Users\TEST\*%modbez%*.mdb"
rem ziel des Kopiervorgangs (destination)
set dest="Z:\transfer\Test\"

Pushd "%source%"
For /F "Delims=" %%A in ('Dir /B/A-D "01-*.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
80220
80220 07.07.2009 um 12:00:18 Uhr
Goto Top
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.
D3ns007
D3ns007 07.07.2009 um 12:07:29 Uhr
Goto Top
Quasi so?:

@Echo off

rem Variable die den aktuellen Tag wiedergibt 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:\Users\TEST\"  
rem ziel des Kopiervorgangs (destination)
set dest="Z:\transfer\Test\"  

Pushd "%source%"  
For /F "Delims=" %%A in ('Dir /B/A-D "01-*.mdb"') Do call :ZipIt "%%~fA"  
Popd
pause
Goto :Eof
:ZipIt
Set "Zip=%~n1"  
Set "Zip=%Dest%%Zip:~0,9%.zip"  
"C:\Program Files\7-Zip\7z.exe" u "%Zip%"  %1  


So jetzt hab ich das angepasst.

Diese Meldung kommt:

"Datei nicht gefunden
Drücken Sie eine beliebige Taste . . ."
80220
80220 07.07.2009 um 12:18:06 Uhr
Goto Top
Ja. Und jetzt noch den Pfad zu 7z.exe in Zeile 19 ergänzen (und das Echo wegnehmen, wenn es funktioniert)
D3ns007
D3ns007 08.07.2009 um 12:00:22 Uhr
Goto Top
D3ns007
D3ns007 08.07.2009 um 17:45:22 Uhr
Goto Top
Also das Problem wurde gelöst hier der Quellcode dazu:

@Echo 

set source="C:\Users\USERNAME\Test"  


Pushd "%source%"  
For /F "Delims=" %%A in ('Dir /B/A-D "C:\Users\USERNAME\Test\01-*.mda"') Do call :ZipIt "%%~fA"  
Popdrem
Del "C:\Test\01-*.mda"  
Goto :Eof
:ZipIt
Set "Zip=%~n1"  
Set "Zip=%archive%%Zip:~0,9%.zip"  
"C:\Program Files\7-Zip\7z.exe" u "%Zip%"  %1  

Vielen Dank für die zahlreich und kompetente Hilfe!

Grüße
D3ns!007