Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Dateien per Batch über WinZip sichern

Frage Entwicklung Batch & Shell

Mitglied: Element23

Element23 (Level 1) - Jetzt verbinden

11.07.2011, aktualisiert 12.07.2011, 6029 Aufrufe, 7 Kommentare

Hallo zusammen,

ich habe mich seit kurzem mit Scripting beschäftigt und möchte nun einen lästigen Vorgang über ein Script beschleunigen, dazu reichen nur leider meine Erfahrungen/Kenntnisse nicht aus.
Situation:
Ich habe verschiedene Dateien die ein Programm erzeugt, möchte diese per Script mit WinZip sichern lassen.
Die Daten sollten nach Monaten/Jahren sortiert zusammen gepackt gezipt werden und dann auch beispielsweise 201106.zip heißen und nach Erfolg gelöscht werden.
Mein Problem ist, das ich die Variablen leider nicht kenne bzw. nicht so recht den Aufbau auf die Reihe bekomme.

Hier mein Anfang:

"@echo

C:\Backup\

if not exist C:\Backup goto fehler
if exist C:\Backup next

:next
C:\Programme\WinZip\wzzip -es "C:\Backup\Backup.zip" "C:\Backup\"

exit"

Ich würde mich über Tipps/Vorschläge/Lösungen etc. sehr freuen

Mit freundlichen Grüßen
Element
Mitglied: Snowman25
11.07.2011 um 17:58 Uhr
Darf ich fragen, warum du den Beitrag auf gelöst gesetzt hast?
Bitte warten ..
Mitglied: Friemler
11.07.2011 um 18:25 Uhr
Das würde mich auch interessieren. Ich hatte gerade ein Script fertig...

[EDIT]
Ich poste das Script dennoch, falls jemand anderes diesen Thread mal über die SuFu findet:
01.
@echo off & setlocal 
02.
 
03.
 
04.
set "SrcDir=C:\Backup" 
05.
set "DestDir=%SrcDir%_Zipped" 
06.
 
07.
 
08.
md "%DestDir%" 2>NUL 
09.
 
10.
set "VBScript=%Temp%\GetFilesAndDate.vbs" 
11.
 
12.
> "%VBScript%" echo Set objFSO = CreateObject("Scripting.FileSystemObject") 
13.
>>"%VBScript%" echo For Each objFile In objFSO.GetFolder(WScript.Arguments(0)).Files 
14.
>>"%VBScript%" echo   WScript.Echo Year(objFile.DateCreated) ^& Right("0" ^& Month(objFile.DateCreated), 2) ^& ":" ^& objFile.Path 
15.
>>"%VBScript%" echo Next 
16.
 
17.
set "LastDate=" 
18.
set "FileList=" 
19.
 
20.
for /f "tokens=1* delims=:" %%a in ('cscript /nologo "%VBScript%" "%SrcDir%" ^| sort') do ( 
21.
  call :ProcessFile %%a "%%b" 
22.
23.
 
24.
call :ProcessFile 0 
25.
del "%VBScript%" 
26.
 
27.
exit /b 
28.
 
29.
 
30.
 
31.
:ProcessFile 
32.
  if "%1" neq "%LastDate%" ( 
33.
    if defined FileList ( 
34.
      "C:\Program Files\WinZip\wzip.exe" -es "%DestDir%\%LastDate%.zip" %FileList% 
35.
      for %%f in (%FileList%) do del "%%~f" 
36.
37.
    set "LastDate=%1" 
38.
    set "FileList=%2" 
39.
  ) else ( 
40.
    set "FileList=%FileList% %2" 
41.
42.
exit /b
In den Zeilen 12 bis 15 wird ein temporäres VBScript erzeugt, das als Parameter den Pfad zu einem Verzeichnis erwartet. Das Script ermittelt alle Dateien dieses Verzeichnisses und gibt ihren vollständigen Pfad sowie das Jahr und den Monat des Erstellungsdatums in folgendem Format aus:
JJJJMM:Laufwerk:\Pfad\Dateiname.Erweiterung
Im Kopf der FOR-Schleife in den Zeilen 20 bis 22 wird das VBScript ausgeführt und seine Ausgabe über eine Pipeline an SORT geschickt. Dessen Ausgabe ergibt also eine nach Datum sortierte Liste aller Dateien des Verzeichnisses. Die FOR-Schleife zerlegt diese Ausgabe in die Datums- und die Pfadkomponente und ruft für jede Datei das Unterprogramm ProcessFile auf. Als erster Parameter wird die Datumskomponente und als zweiter Parameter die Pfadkomponente übergeben.

Das Unterprogramm ProcessFile prüft, ob das übergebene Datum (Parameter %1) vom Datum des letzten Aufrufs verschieden ist.
Wenn nicht, wird der übergebene Pfad (Parameter %2) an eine Liste von Dateipfaden angehängt (Zeile 40).
Wenn ja, werden in Zeile 34 alle Dateien aus der Dateiliste mit WinZip gepackt und danach in Zeile 35 die Quelldateien gelöscht.
Danach wird das aktuelle Datum gespeichert und die Dateiliste mit dem aktuellen Dateinamen als einzigem Eintrag überschrieben (Zeilen 37 u. 38).

Die Abfrage in Zeile 33 ist für den ersten Aufruf von ProcessFile relevant. Dann ist der aktuelle Datumswert vom verherigen/initialen Datumswert verschieden aber die Dateiliste ist natürlich noch leer.

Nach Abschluss der FOR-Schleife wird in Zeile 24 ProcessFile nochmals aufgerufen, um die zuletzt in die Dateiliste aufgenommenen Dateien zu verarbeiten. Als erster Parameter wird dann 0 übergeben, damit der Vergleich in Zeile 32 auf jeden Fall Wahr als Ergebnis liefert.

Das Parameterformat von WinZip ist mir nicht bekannt. Deshalb weiß ich nicht, ob man einfach eine Liste von Dateinamen an WinZip übergeben kann, so wie in Zeile 34. Evtl. muss hier noch eine Anpassung gemacht werden (z.B. die Dateipfade statt in eine Variable in eine Datei schreiben, wenn WinZip eine solche Dateiliste verarbeiten kann).

Gruß
Friemler
[/EDIT]
Bitte warten ..
Mitglied: Element23
12.07.2011 um 15:47 Uhr
Hallo zusammen,
zuerst einmal vielen Dank Friemler, das Script konnte ich gut anpassen und bis auf ein größeres Problem hat es super geklappt.
Hier nun mein Problem bzw. Frage:
Gibt es eine Möglichkeit auf die WinZip/Winrar Archivierung zu verzichten und über eine .net Variante oder eine andere zu zippen?


Vielen Dank
Gruß
Element
Bitte warten ..
Mitglied: Friemler
12.07.2011 um 16:40 Uhr
Hallo Element23,

wenn Du damit ein anderes Archivierungsprogramm meinst - 7Zip. Kost' nix und gibt es als Konsolenversion.

Über .Net zippen - k.A. ob/wie das geht . Google ist Dein Freund.

Gruß
Friemler
Bitte warten ..
Mitglied: Element23
13.07.2011 um 15:20 Uhr
Hallo Friemler,

über 7-Zip funktioniert das Archivieren auch wunderbar, mein Problem ist nur leider immer noch wie oben beschrieben, das ich gern meine Daten nach Pfad/Datum.zip erstellt haben möchte.
Da wollte ich wieder auf dein Script zurückgreifen und dies anpassen.
Problem meinerseits ist nur leider, das ich nicht so ganz verstehe wie der bzw. ein VBScript Aufruf funktioniert, beim starten des Scripts erstellt sich "ein" Ordner, wie auch im "DestDir=" angegeben ist.
Die Syntax des Programms kann ich nachvollziehen nur leider nicht so ganz warum es nicht funktioniert bzw. den aufruf des VBScripts ob dieser überhaupt so funktionieren kann?

Das Script schaut jetzt nach meinem versuch es auf 7-Zip anzupassen wie folgt aus:

@echo off & setlocal


set "SrcDir=C:\Backup\Sout\"
set "DestDir=%SrcDir%_Zipped"


md "%DestDir%" 2>NUL

set "VBScript=%Temp%\GetFilesAndDate.vbs"

"%VBScript%" echo Set objFSO = CreateObject("Scripting.FileSystemObject")
>>"%VBScript%" echo For Each objFile In objFSO.GetFolder(WScript.Arguments(0)).Files
>>"%VBScript%" echo WScript.Echo Year(objFile.DateCreated) ^& Right("0" ^& Month(objFile.DateCreated), 2) ^& ":" ^& objFile.Path
>>"%VBScript%" echo Next

set "LastDate="
set "FileList="

for /f "tokens=1* delims=:" %%a in ('cscript /nologo "%VBScript%" "%SrcDir%" ^| sort') do (
call :ProcessFile %%a "%%b"
)

call :ProcessFile 0
del "%VBScript%"

exit /b



:ProcessFile
if "%1" neq "%LastDate%" (
if defined FileList (
"C:\Programme\7-Zip" a -tzip "%DestDir%\%LastDate%.zip" %FileList%
for %%f in (%FileList%) do del "%%~f"
)
set "LastDate=%1"
set "FileList=%2"
) else (
set "FileList=%FileList% %2"
)
exit /b

pause



Ich weiß leider nicht ob das vbscript bzw. der untere Teil überhaupt angesprochen werden.
Evtl. weiß jemand eine Lösung bzw. kann meinem Verständnis auf die Sprünge helfen.

Viele Grüße
Element
Bitte warten ..
Mitglied: Friemler
13.07.2011 um 16:06 Uhr
Hallo Element,

zunächst mal ein paar Tipps:

  1. Wenn Du Programmcode postest, verwende bitte die Codeformatierung. Das vermeidet, dass, so wie oben, eine Codezeile plötzlich in einer Textbox erscheint, Einrückungen verloren gehen u.ä. Dinge, die das Lesen des Quelltextes erschweren. Du kannst die Codeformatierung auch nachträglich einfügen .
  2. Statt set "SrcDir=C:\Backup\Sout\" würde ich set "SrcDir=C:\Backup\Sout" schreiben, sonst entsteht als Ausgabeverzeichnis C:\Backup\Sout\_Zipped. C:\Backup\Sout_Zipped wäre aber sinniger.
  3. Statt "C:\Programme\7-Zip" müsste es wohl eher "C:\Programme\7-Zip\7za.exe" heißen, wenn Du die Konsolenversion von 7Zip benutzt und diese nach C:\Programme\7-Zip kopiert hast.
  4. Dein PAUSE-Befehl in der letzten Zeile lässt mich folgendes vermuten:
    • Du startest das Script per Doppelklick und wolltest verhindern, dass sich das Konsolenfenster schließt. Beim debuggen von Batchscripts solltest Du das Script aber immer aus einem Konsolenfenster heraus starten und @ECHO OFF rausnehmen aber nicht SETLOCAL.
    • Du hast nicht verstanden, dass es sich bei dem Abschnitt unterhalb von :ProcessFile um ein Unterprogramm handelt. Das zweite EXIT /B in der letzten Scriptzeile stellt nicht das Ende des Programms dar, sondern ist der Rücksprungbefehl zum Hauptprogramm. Das Script endet nach dem ersten EXIT /B in Zeile 27. Wenn es fehlen würde, würde CMD einfach anfangen, den Code des Unterprogramms ProcessFile auszuführen. => Dein PAUSE muss vor das EXIT /B aus Zeile 27.

Wenn Du prüfen willst, ob ProcessFile ausgeführt wird, setze doch ein ECHO Hier ist ProcessFile als ersten Befehl in das Unterprogramm. Besser ist, wie schon gesagt, das Script ohne @ECHO OFF auszuführen, dann siehst Du alle Codezeilen in der Reihenfolge, in der sie ausgeführt werden. Um die Sache abzukürzen, würde ich dann nur 3 oder 4 Dateien in das Verzeichnis C:\Backup\Sout legen.

Der VBScript-Schnipsel wird in eine temporäre Datei geschrieben und durch CSCRIPT /NOLOGO ... im Kopf der FOR-Schleife ausgeführt. Die Ausgabe des Schnipsels wird von der FOR-Schleife in ihre Bestandteile zerlegt, die dann an die Laufvariablen %%a und %%b zugewiesen werden. FOR ist ein komplexer Befehl. Jedesmal zu erklären, wie das ganze funktioniert ist zu viel Aufwand, deshalb habe ich mein Tutorial zur FOR-Schleife geschrieben. Beschäftige Dich dort mit den Kapiteln "Allgemeines zur FOR-Schleife", "Die Mehrzweck-Variante, FOR /F" bzw. dessen Unterkapitel "Allgemeines zu FOR /F" und "Verarbeiten der Ausgabe eines Programms/Befehls"

Gruß
Friemler
Bitte warten ..
Ähnliche Inhalte
Entwicklung
Verzeichnise sichern mit batch datei (Win10)
gelöst Frage von LimbachEntwicklung13 Kommentare

Bitte um eure Hilfe für mein Problem. Ich möchte gerne ein Verzeichnis mit Unterverzeichnissen per Batch Datei mit win7 ...

Windows Server
AD per Batch sichern
gelöst Frage von Luciver1981Windows Server8 Kommentare

Hallo liebe Admins, ich möchte meine AD per Batch wöchentlich sichern hab allerdings noch nichts brauchbares gefunden. Welche Befehle ...

Backup
Mitarbeiter Dateien sichern
gelöst Frage von FishermansFriendBackup6 Kommentare

Hallo zusammen, ich habe folgendes Problem: wir möchten gerne dahin kommen, dass die Mitarbeiter- Dateien regelmäßig auf unserem Fileserver ...

Backup
Backup Exec Dateien sichern
Frage von ofodagBackup3 Kommentare

Hallo zusammen, folgende Problematik: Ich möchte gerne per Backup Exec Dateien von einem Server auf ein Speicher kopieren. Das ...

Neue Wissensbeiträge
Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 8 StundenWindows 101 Kommentar

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 9 StundenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Internet

USA: Die FCC schaff die Netzneutralität ab

Information von Frank vor 23 StundenInternet3 Kommentare

Jetzt beschädigt US-Präsident Donald Trump auch noch das Internet. Der neu eingesetzte FCC-Chef Ajit Pai ist bekannter Gegner einer ...

DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 1 TagDSL, VDSL2 Kommentare

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Heiß diskutierte Inhalte
TK-Netze & Geräte
VPN-fähige IP-Telefone
Frage von the-buccaneerTK-Netze & Geräte16 Kommentare

Hi! Weiss noch jemand ein VPN-fähiges IP-Telefon mit dem man z.B. einen Heimarbeitsplatz gesichert anbinden könnte? Habe nur einen ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...

Windows Server
Anmeldung direkt am DC nicht möglich
Frage von ThomasGrWindows Server16 Kommentare

Hallo, ich habe bei unserem Server 2016 Standard ein Problem. Keine Ahnung wie das auf einmal passiert ist. Ich ...

Windows Server
KMS Facts for Client configuration
Frage von winlinWindows Server12 Kommentare

Hey Leute, wir haben in unserem Netz nun einen neuen KMS Server. Haben Bestands-VMs die noch nicht aktiviert sind. ...