swuser
Goto Top

Archivierung mittels Batch auf File-Server

Hallo,

ich habe folgendes Problem:

ich habe ein kleine Batch-Programm geschrieben, das mir Druckaufträge auf dem Fileserver in separate Ordner verschiebt, diese Ordner sollen einmal im Monat archiviert werden.
Da ich aber auf dem FileServer kein WinRar, WinZip o.Ä. installieren kann, würde ich gern wissen ob man nicht auch irgendwie mit Windowseigenen Mitteln archivieren kann?

Danke schonmal im Vorraus!

Content-ID: 126431

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

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

Aristor
Aristor 05.10.2009 um 09:14:07 Uhr
Goto Top
Mal mit NTBACKUP versucht oder willst du es direkt mit im Script haben?
ausführen --> ntbackup
St-Andreas
St-Andreas 05.10.2009 um 09:15:40 Uhr
Goto Top
Hallo,

eines vorweg: etwas zu packen hat noch nichts mit einer Archivierung im rechtlichen Sinne der diversen Archivierungspflichten zu tun.

Ansonsten für Deinen Fall würde ich Dir zu 7Zip raten. Ist kostenlos und die Kommandozeilenversion brauchst Du nicht zu installieren.
SWuser
SWuser 05.10.2009 um 09:21:58 Uhr
Goto Top
Zitat von @Aristor:
Mal mit NTBACKUP versucht oder willst du es direkt mit im Script
haben?
ausführen --> ntbackup

Danke für die Info.

Die Archivierung sollte direkt mit im Script ausgeführt werden.
Wie mache ich das?
Snowman25
Snowman25 05.10.2009 um 09:22:25 Uhr
Goto Top
der cmd-befehl den du suchst, ist wohl makecab
um danach wieder an die Dateien heran zu kommen, kannst du expand oder extract benutzen. je nachdem, was auf deinem System vorhanden ist
SWuser
SWuser 05.10.2009 um 09:24:58 Uhr
Goto Top
Zitat von @St-Andreas:
Hallo,

eines vorweg: etwas zu packen hat noch nichts mit einer Archivierung
im rechtlichen Sinne der diversen Archivierungspflichten zu tun.


Hallo,

nee, soll nur gepackt werden, weil der Speicherplatz dadurch gespart wird.
St-Andreas
St-Andreas 05.10.2009 um 09:27:09 Uhr
Goto Top
Na denn probier mal die vorgestellten Möglichkeiten aus und teste mal welche Packmethode die kleinsten Archive erzeugt. Bei 7Zip bitte auch mal das Format 7Zip nutzen!

Wäre nett wenn Du das Ergebnis dann hier posten könntest.
SWuser
SWuser 05.10.2009 um 09:28:23 Uhr
Goto Top
Zitat von @Snowman25:
der cmd-befehl den du suchst, ist wohl makecab
um danach wieder an die Dateien heran zu kommen, kannst du expand
oder extract benutzen. je nachdem, was auf deinem System vorhanden
ist

Von makecab habe ich auch schon gelesen. Leider sehe ich bei den Parametern nicht so recht durch, die mir die Hilfe dazu anbietet (zu packende Datei... Ziel... usw.)
Snowman25
Snowman25 05.10.2009 um 09:30:11 Uhr
Goto Top
Zitat von @SWuser:
Von makecab habe ich auch schon gelesen. Leider sehe ich bei den
Parametern nicht so recht durch, die mir die Hilfe dazu anbietet (zu
packende Datei... Ziel... usw.)

einfach mal 10 minuten mit dem befehl herumprobieren. Ist immer die beste möglichkeit, die parameter zu verstehen ;)

Alternativ gäbe es noch den befehl cabarc
SWuser
SWuser 05.10.2009 um 10:21:10 Uhr
Goto Top
Hmm... habe mich jetzt mal genauer mit MAKECAB auseinander gesetzt. Ich bekomme es hin, dass ich eine Datei in ein .cab Archiv "verwandle". ich möchte aber den Inhalt des ganzen Ordners in ein .cab Archiv packen.
Geht das überhaupt???
rubberman
rubberman 05.10.2009 um 23:58:12 Uhr
Goto Top
Hallo SWuser,

von makecab hatte ich bis jetzt noch nix gehört, finde aber interessant, dass Windows ein Packprogramm an Bord hat. Also hab ich mich mal kurz damit beschäftigt. Wenn ich das msdn richtig verstehe, könntest du folgendes versuchen:
@echo off &setlocal
:: die Dateiendung
set ext=*.dat
:: die Verzeichnisse der Druckaufträge
set folder_1=c:\test1
set folder_2=c:\test2

set nr=0
for /f "delims== tokens=1*" %%a in ('set folder_') do set "folder=%%b" &call :sub  
pause
exit

:sub
set /a nr+=1
pushd "%folder%"  
:: Name kreieren
for /f "delims=. tokens=1-3" %%i in ("%date%") do set "name=Archiv_%%k%%j%%i_%nr%.cab"  
:: .ddf Datei erstellen
chcp 1252>nul
>directives.ddf echo .Option Explicit
>>directives.ddf echo .Set CabinetNameTemplate=%name%
>>directives.ddf echo .Set CompressionType=MSZIP
>>directives.ddf echo .Set UniqueFiles="OFF"  
>>directives.ddf echo .Set Cabinet=on
>>directives.ddf echo .Set DiskDirectory1=Temp
for /f "delims=" %%i in ('dir /a-d /b "%ext%"') do echo "%%i">>directives.ddf  
chcp 850>nul
:: makecab aufrufen
makecab /f directives.ddf
:: aufräumen
del setup.inf
del setup.rpt
del directives.ddf
move "Temp\%name%" ".\%name%"  
rd Temp
popd
goto :eof

Grüße
rubberman

<edit:> unten aufgeführte Änderungen vorgenommen </edit>
SWuser
SWuser 06.10.2009 um 07:43:40 Uhr
Goto Top
Danke für den Ansatz!

Ich habe jetzt bei set folder= meinen Ordner angegeben, wo die "nackten" Druckaufträge drin liegen.
Das Prog läuft auch, nur packt es nichts: "Datei nicht gefunden".
ganz unten steht dann auch noch zwei mal: "Das System kann die angegebene Datei nicht finden"
In dem Ordner sind aber 100%ig .dat files.

Edit:

Durch testweises Einfügen von Pausen nach jeder Zeile habe ich herausgefunden, dass hier:

for /f "delims=" %%i in ('dir /a-d /b "%ext%"') do echo "%%i">>directives.ddf

irgendwas nicht hinhaut, denn da sagt er mir: "Datei nicht gefunden".
rubberman
rubberman 06.10.2009 um 13:05:49 Uhr
Goto Top
Hallo SWuser,

2 mögliche Ursachen fallen mir ein:
- Du hast Umlaute in den Dateinamen. In dem Fall müsste man die Codepage für das Schreiben in die Datei noch ändern. (mach ich mal eben oben)
- Die Dateiextension ist nicht richtig angegeben. Welche Dateiendung haben die Dateien und wie sieht die Zeile
set "ext=..."
bei dir aus?

Grüße
rubberman
SWuser
SWuser 06.10.2009 um 13:13:06 Uhr
Goto Top
Zitat von @rubberman:
Hallo SWuser,

2 mögliche Ursachen fallen mir ein:
- Du hast Umlaute in den Dateinamen. In dem Fall müsste man die
Codepage für das Schreiben in die Datei noch ändern. (mach
ich mal eben oben)
- Die Dateiextension ist nicht richtig angegeben. Welche Dateiendung
haben die Dateien und wie sieht die Zeile
set "ext=..."
bei dir aus?

Grüße
rubberman

Da hast du mir aber ebend mit Punkt 2 den richtigen Wink gegeben! die Endung meiner Dateien, die gepackt werden sollen ist .dat.

Hab das auch gleich mal eingegeben und es funktioniert! Super! Danke! Oft sinds die kleinen Dinge, die große Fehler verursachen ;)

Danke, Danke!!! :D

Edit: Wie kann ich es einstellen, dass das nicht nur in einem Ordner gepackt wird, sondern in allen Ordnern? Muss ich dazu den o.g. Code x-mal (für jeden Ornder) neu hinten anhängen? Oder kann ich auch bei set folder= mehrer Ordner hintereinander angeben?
rubberman
rubberman 06.10.2009 um 22:44:06 Uhr
Goto Top
Hallo SWuser,

du könntest den Code als Subroutine laufen lassen. Ich ändere mal oben, wie ich mir das vorstelle. Wichtig in diesem Beispiel ist, dass alle verwendeten Variablen für die Pfade mit folder_ beginnen.

Grüße
rubberman
SWuser
SWuser 07.10.2009 um 07:44:45 Uhr
Goto Top
Hallo rubberman,

funktioniert super! Echt klasse! Danke, danke! :D

Grüße
Felix