Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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

VB-Script zum zippen und anschließendem löschen der Ursprungsdatei mit Windowsboardmitteln in Win7 bzw Server 2008R2

Frage Entwicklung VB for Applications

Mitglied: Braindead

Braindead (Level 1) - Jetzt verbinden

10.05.2012 um 16:26 Uhr, 3904 Aufrufe, 20 Kommentare

Hallo,

ich möchte ein VB-Script erstellen, welches mir folgende Punkte erfüllt:
1. *.bak Dateien sollen in einen Unterordner gezippt werden
2. andere Dateitypen sollen unberührt bleiben
3. nur *.bak Dateien die älter als 7 Tage sind sollen gezippt werden
4. Urspungsdatei soll nach dem erfolgreichen Zip gelöscht werden
5. eine Protokolldatei soll angelegt werden
6. es soll mit Windowsboardmitteln gezippt werden, kein Winrar, 7-zip oder sonstiges

Ich habe leider wenig, sozusagen keine Erfahrung in Programmierung.

Ich habe mich bis jetzt durch folgende Erläuterungen gelesen aber komme damit nicht klar.

3
4

Ich habe auch einmal folgenden Teil eines Scripts auf meine 7-Tage gebracht:

01.
myFolder = "C:\Neuer Ordner\" 
02.
myZipFile = ("C:\Neuer Ordner\Zips" & (Date()&".zip")) 
03.
 
04.
counterFile = ("C:\Neuer Ordner\ZIPPEN am " & Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) & ".txt") 'C:\Neuer Ordner\Zips 
05.
 
06.
Set objApp = CreateObject( "Shell.Application" ) 
07.
Set ObjFSO = CreateObject( "Scripting.FileSystemObject" ) 
08.
Set objcounterFile = objFSO.CreateTextFile(counterFile) 
09.
 
10.
AltDatum = DateAdd("d", -7, Date) 
11.
 
12.
For Each objItem in objApp.NameSpace( myFolder ).Items 
13.
    If objItem.IsFolder Then 
14.
        ' Check if the subfolder is empty, and if 
15.
        ' so, skip it to prevent an error message 
16.
        Set objFolder = objFSO.GetFolder( objItem.Path ) 
17.
        If objFolder.Files.Count + objFolder.SubFolders.Count = 0 Then 
18.
            intSkipped = intSkipped + 1 
19.
 
20.
        Else 
21.
            Datum = objFSO.GetFolder(objItem.Path).DateLastModified 
22.
            'MsgBox ("Check U " & Datum) 'DateLastModified 
23.
				 
24.
            If Datum < AltDatum Then 'alte Datei 
25.
                objApp.NameSpace( myZipFile ).CopyHere objItem 
26.
                WScript.Echo "Alt U: " & Datum & " " & objItem.Name 
27.
                objcounterFile.WriteLine "Test Unterverzeichnis"'(CInt(objFolder.Files.Count) + CInt(objFolder.SubFolders.Files.Count)) 
28.
                objcounterFile.Close				 
29.
                WScript.Sleep 1000 
30.
				intAlteVerz = intAlteVerz + 1 
31.
            Else 
32.
                WScript.Echo "Neu U: " & Datum & " " & objItem.Name 
33.
            End If 
34.
				 
35.
        End If  
36.
    Else 
37.
        Datum = objFSO.GetFile(objItem.Path).DateLastModified 
38.
        'MsgBox ("Check V " & Datum) 'DateLastModified 
39.
				 
40.
        If Datum < AltDatum Then 'alte Datei 
41.
            objApp.NameSpace( myZipFile ).CopyHere objItem 
42.
            WScript.Echo "Alt V: " & Datum & " " & objItem.Name 
43.
            objcounterFile.WriteLine "Test Unterverzeichnis"'(CInt(objFolder.Files.Count) + CInt(objFolder.SubFolders.Files.Count)) 
44.
            objcounterFile.Close				 
45.
            WScript.Sleep 1000 
46.
			intAlteDatei = intAlteDatei + 1 
47.
        Else 
48.
            WScript.Echo "Neu V: " & Datum & " " & objItem.Name 
49.
        End If 
50.
			 
51.
    End If 
52.
Next 
53.
'objFSO.CreateTextFile(counterFile).Write "Alte Verzeichnisse: " & intAlteVerz & vbTab & "Alte Dateien: " & intAlteDatei
Dabei ist mein Ergebnis:

1. erhalte nur Popups über die Dateien die "Neu" sind, also weniger als 7 Tage
2. Es wird eine *.txt Datei erstellt die leer bleibt
3. es wird nichts gezippt
4. eine Fehlermeldung ab der Datei die älter als 7 Tage ist
Zeile: 41
Zeichen: 13
Fehler: Objekt erforderlich: 'objApp.NameSpace(...)'

Ich bedanke mich jetzt schon für die Hilfe und Unterstützung!
Bitte seid milde mit mir

Danke!

Mit freundlichen Grüßen
Braindead
Mitglied: micneu
10.05.2012 um 21:02 Uhr
warum muss es denn vb-script sein?
was ist mit powershell? würde dir auch eine lösung damit helfen?
Bitte warten ..
Mitglied: Braindead
11.05.2012 um 07:44 Uhr
Guten Morgen zusammen,

ja das würde mir natürlich genauso weiterhelfen, wenn sich damit alles realisieren lässt. Leider habe ich davon auch keine großen Kenntnisse.
Habe mich halt nur durch VB-Script etwas durchgelesen und da nach Lösungen gesucht.

Vielen dank schon einmal für die Rückmeldung.

Mit freundlichen Grüßen
Bitte warten ..
Mitglied: Braindead
14.05.2012 um 11:00 Uhr
Hallo,

leider niemand mehr dabei mir etwas unter die Arme zu greifen?

Vielen Dank!
Bitte warten ..
Mitglied: bastla
17.05.2012 um 23:04 Uhr
Hallo Braindead!

Unter der Annahme, dass nur eine Ordnerebene untersucht werden muss, könntest Du es etwa so versuchen:
01.
myFolder = "C:\Neuer Ordner\" 
02.
myZipFile = myFolder & "\Zips" & Date & ".zip" 
03.
Ext = "bak" 'Kleinbuchstaben verwenden 
04.
Alter = 7 
05.
 
06.
CounterFile = myFolder & "\ZIPEN am " & Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) & ".txt" 
07.
 
08.
Set objApp = CreateObject("Shell.Application") 
09.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
10.
Set objCounterFile = objFSO.CreateTextFile(counterFile) 
11.
 
12.
objFSO.CreateTextFile(myZIPFile).Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0)) 'ZIP-Datei erstellen 
13.
 
14.
AltDatum = DateAdd("d", -Alter, Date) 
15.
 
16.
For Each objFile In objFSO.GetFolder(myFolder).Files 
17.
    strFileName = objFile.Name 
18.
   	If LCase(objFSO.GetExtensionName(strFileName)) = Ext Then 
19.
        Datum = objFile.DateLastModified 
20.
        If Datum < AltDatum Then 'alte Datei 
21.
            objApp.NameSpace(myZipFile).CopyHere objFile.Path 
22.
            WScript.Echo "Alt: " & Datum & " " & strFileName 
23.
            objCounterFile.WriteLine "Gezippt: " & Datum & " " & strFileName 
24.
            intAlteDatei = intAlteDatei + 1 
25.
            'warten, bis Datei in ZIP geschrieben wurde 
26.
            Do Until objApp.Namespace(myZIPFile).Items.Count = intAlteDatei  
27.
                WScript.Sleep 100 
28.
            Loop 
29.
            objFile.Delete 'Datei löschen 
30.
        Else 
31.
            WScript.Echo "Neu: " & Datum & " " & strFileName 
32.
        End If 
33.
    End If 
34.
Next 
35.
objCounterFile.WriteLine "Dateien gezipt: " & intAlteDatei
Starten (wegen der Bildschirmausgaben) aus einer CMD-Shell per "cscript //nologo Scriptname.vbs" (oder nach dem Testen die Zeilen 22, 30 und 31 auskommentieren) ...

Bitte beachten: Die alten Dateien werden kommentarlos gelöscht (siehe Zeile 29)!

Grüße
bastla
Bitte warten ..
Mitglied: Braindead
25.05.2012 um 10:19 Uhr
Hallo,
entschuldige das ich das jetzt erst wieder aufgreife.

Ich war aus gesundheitlichen Gründen verhindert
Also es sieht im Moment so aus, dass ich eine Zip-datei erhalte, allerdings diese ohne Inhalt bleibt und die Dateien werden auch nicht gelöscht.

Ist eine Datei auch älter, als die hier im Beispiel genannten 7 Tage, erhalte ich eine Fehlermeldung:

Zeile: 21
Zeichen: 13
Fehler: Objekt erforderlich: 'objApp.NameSpace(...)'

Ja Du hattest recht mit Deiner Annahme, das nur eine Ordnerebene untersucht wird.

Ich danke Dir weiterhin für Deine Unterstützung.

Vielen Dank!

Mit freundlichen Grüßen
Braindead
Bitte warten ..
Mitglied: bastla
25.05.2012, aktualisiert um 11:49 Uhr
Hallo Braindead!
eine Zip-datei erhalte, allerdings diese ohne Inhalt bleibt und die Dateien werden auch nicht gelöscht.
Ergibt sich beides logisch aus der Tatsache, dass eine leere ZIP-Datei vorweg erstellt wird (bzw werden muss), und das Zippen der alten Dateien in Zeile 21 fehlschlägt, wodurch das Script abbricht ...

... was allerdings bei meinem Test (mit dem von hier heruntergeladenen Scriptcode und als einziger Änderung der Anpassung des Pfades in Zeile 1) nicht passiert.

Hast Du den Code ebenfalls kopiert?

Grüße
bastla
Bitte warten ..
Mitglied: Braindead
25.05.2012, aktualisiert um 11:06 Uhr
Hallo,

ja ich habe den Code komplett kopiert.
DIe Anpassung in Zeile 1 getätigt und dann noch die Tage auf 22 geschraubt, da ich eine *.bak habe die 22 und eine die 23 tage alt ist. Dann ein Kommandozeilefenster als Administrator gestartet und das Script aufgerufen.

Es entsteht die zip mit dem Datum von heute, ohne Inhalt.
Bitte warten ..
Mitglied: bastla
25.05.2012, aktualisiert um 11:54 Uhr
Hallo Braindead!

Gibt's auch immer noch die angesprochene Fehlermeldung? Diese würde bedeuten, dass "objApp" nicht vorhanden wäre (was aber, wenn am Beginn der Zeile 8 das "Set" steht, der Fall sein müsste) ...

... strange jedenfalls, das Ganze ...
Solange Du nur testest, könntest Du die Zeile 29 "entschärfen":
'objFile.Delete 'Datei löschen
- so kannst Du mit verschiedenen Tagesanzahlen experimentieren (nimm versuchsweise doch nochmal zB nur 10 Tage), ohne dass ggf Dateien gelöscht würden ...


Grüße
bastla
Bitte warten ..
Mitglied: Braindead
25.05.2012 um 12:28 Uhr
Hallo,

also ich habe Zeile 29 mit ' ausgeklammert.
Habe jetzt *.bak Dateien, die bis zu 23 Tage alt sind, in dem Ordner C:\Neuer Ordner.
Wenn ich nun das Script wieder über ein Kommandofenster als Administrator ausführe, wird ein Ordner mit dem namen "Zips25.05.1012" und eine Datei mit dem namen Zippen am "2012-05.25.txt" angelegt. Der Zip Ordner bleibt leer und die Textdatei ist auch ohne Inhalt.

Ich habe leider immer noch die Fehlermeldung wie oben.
Warum ich nun eine fehlermeldung erhalte und Du nicht bleibt mir ein Rätsel

Vielen Dank auf jeden Fall!!!

Mit freundlichen Grüßen
Braindead
Bitte warten ..
Mitglied: bastla
25.05.2012 um 14:44 Uhr
Hallo Braindead!

Versuch es einmal mit folgender Zeile 2:
myZipFile = myFolder & "Zips" & Date & ".zip"
Dabei ist zu beachten, dass der Pfad in Zeile 1 mit einem "\" enden muss!

Grüße
bastla
Bitte warten ..
Mitglied: micneu
25.05.2012, aktualisiert um 16:17 Uhr
also hier mein erster ansatz in powershell.
es wird noch keine log-datei erstellt und noch nicht der komplette pfad in der zipdatei erstellt.

01.
#   ************************************************************** 
02.
#    einmal auf der powershell ausgeführt werden 
03.
#     "Set-ExecutionPolicy Unrestricted" 
04.
#   ************************************************************** 
05.
#    zip funktionen von   
06.
#    http://blogs.msdn.com/b/daiken/archive/2007/02/12/compress-files-with-windows-powershell-then-package-a-windows-vista-sidebar-gadget.aspx 
07.
#    
08.
#   ************************************************************** 
09.
#   * Erstellt M.N. - POWERSHELL / Entwicklung   25.05.2012      * 
10.
#   ************************************************************** 
11.
# variablen 
12.
$quelle = "C:\Dokumente und Einstellungen\m.neumann\Eigene Dateien\Eigene Bilder" 
13.
$endung = "*.jpg" 
14.
$TAGEABZUG=7 
15.
$ZIPDATUM=$((Get-Date) + (New-TimeSpan -days -$TAGEABZUG)) 
16.
$ZIPFILE = "c:\$(Get-Date $ZIPDATUM -uformat "%Y-%m-%d").zip" 
17.
$file = @(Get-ChildItem $quelle -filter $endung -recurse | Where-Object {$_.lastwritetime -le (Get-Date $ZIPDATUM)}) 
18.
$filezip = $file #| select -first 1 
19.
$filename = $filezip | Select-Object Name 
20.
#echo $filename 
21.
$filenamefull = $filezip.fullName 
22.
Get-Date $ZIPDATUM -uformat "%Y-%m-%d" 
23.
new-zip $ZIPFILE 
24.
foreach ($i in $file) { 
25.
    $filename = $i | Select-Object Name 
26.
    echo $i.fullName 
27.
    dir $i.fullName | Add-Zip $ZIPFILE 
28.
29.
 
30.
 
31.
 
32.
function New-Zip 
33.
34.
	param([string]$zipfilename) 
35.
	set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
36.
	(dir $zipfilename).IsReadOnly = $false 
37.
38.
## usage: new-zip c:\demo\myzip.zip 
39.
 
40.
function Add-Zip 
41.
42.
	param([string]$zipfilename) 
43.
 
44.
	if(-not (test-path($zipfilename))) 
45.
46.
		set-content $zipfilename ("PK" + [char]5 + [char]6 + ("$([char]0)" * 18)) 
47.
		(dir $zipfilename).IsReadOnly = $false	 
48.
49.
	 
50.
	$shellApplication = new-object -com shell.application 
51.
	$zipPackage = $shellApplication.NameSpace($zipfilename) 
52.
	 
53.
	foreach($file in $input)  
54.
	{  
55.
            $zipPackage.CopyHere($file.FullName) 
56.
            Start-sleep -milliseconds 500 
57.
58.
59.
 
60.
## usage: dir c:\demo\files\*.* -Recurse | add-Zip c:\demo\myzip.zip 
61.
 
62.
function Get-Zip 
63.
64.
	param([string]$zipfilename) 
65.
	if(test-path($zipfilename)) 
66.
67.
		$shellApplication = new-object -com shell.application 
68.
		$zipPackage = $shellApplication.NameSpace($zipfilename) 
69.
		$zipPackage.Items() | Select Path 
70.
71.
72.
## usage: Get-Zip c:\demo\myzip.zip 
73.
 
74.
function Extract-Zip 
75.
76.
	param([string]$zipfilename, [string] $destination) 
77.
 
78.
	if(test-path($zipfilename)) 
79.
	{	 
80.
		$shellApplication = new-object -com shell.application 
81.
		$zipPackage = $shellApplication.NameSpace($zipfilename) 
82.
		$destinationFolder = $shellApplication.NameSpace($destination) 
83.
		$destinationFolder.CopyHere($zipPackage.Items()) 
84.
85.
86.
## usage: extract-zip c:\demo\myzip.zip c:\demo\destination
Bitte warten ..
Mitglied: Braindead
26.05.2012 um 13:49 Uhr
Hallo,

erst einmal Danke euch beiden. Ich werde vermutlich erst wieder Dienstag zum testen und ausprobieren kommen.
Ist halt langes Wochenende
Sobald ich Dienstag vielleicht auch Montag dazu gekommen bin werde ich euch rückmeldung geben!

Vielen Dank und auch ein schönes langes Wochenende!
Das Wetter ist ja z.Z. bei uns Bombe

Mit freundlichen Grüßen
Braindead
Bitte warten ..
Mitglied: Braindead
29.05.2012 um 13:59 Uhr
Hallo,

@all erst einmal hoffe ich das Wochenende wurde in der Sonne genossen

@ bastla
Ich habe die Änderungen wie geschrieben von Dir in den Code angepasst.
Es läuft alles wunderbar!!!
Es wurden in meinem Bsp. die Dateien die älter sind als 10 Tage gezippt. Dir Logdatei entsteht auch, alles wunderbar
Ich bedanke mich vielmals!!!

@micneu
Ich habe in Powershell noch nicht ausprobiert, hoffe aber das gleich oder die Tage noch damit zu testen und schaue was ich davon lerne und inwiefern ich damit klarkomme.
Ich danke Dir auf jeden Fall auch vielmals!!!

Mit freundlichen Grüßen Braindead
Bitte warten ..
Mitglied: bastla
29.05.2012 um 14:04 Uhr
Hallo Braindead!

Freut mich, dass es so passt (mir wäre ansonsten auch nix mehr eingefallen) ...

Grüße
bastla
Bitte warten ..
Mitglied: Braindead
29.05.2012 um 15:19 Uhr
Hallo bastla,

soweit so gut. Ich würde das ganze nun noch anpassen. Da mir die Popups doch etwas nervig waren habe ich die ausgeklammert.
Die gezippten Dateien sollen nun in einem Unterordner landen. Passiert bei meiner Anpassung auch.
Mit dem löschen der Ursprungsdatei funktioniert auch wunderbar.(hab ich aber auch wieder ausgeklammert)
Nun möchte ich aber das in dem Unterordner ein weiterer Unterordner mit dem Tagesdatum entsteht und in diesem dann die Dateien jeweils einzelnt gezippt und nicht alle *.bak" Dateien in einem Zip.
Ist diese Anpassung möglich? Meines wissens wäre dies jetzt in der For Schleife anzusiedeln, oder ist der ganze Code jetzt fürn...
01.
myFolder = "C:\Neuer Ordner\" 
02.
myZipFile = "C:\Neuer Ordner\Sicherung\" & "Zips" & Date & ".zip" 
03.
Ext = "bak" 'Kleinbuchstaben verwenden 
04.
Alter = 2 
05.
 
06.
CounterFile = "C:\Neuer Ordner\Sicherung\" & "\ZIPPEN am " & Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) & ".txt" 
07.
 
08.
Set objApp = CreateObject("Shell.Application") 
09.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
10.
Set objCounterFile = objFSO.CreateTextFile(counterFile) 
11.
 
12.
objFSO.CreateTextFile(myZIPFile).Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0)) 'ZIP-Datei erstellen 
13.
 
14.
AltDatum = DateAdd("d", -Alter, Date) 
15.
 
16.
For Each objFile In objFSO.GetFolder(myFolder).Files 
17.
    strFileName = objFile.Name 
18.
   	If LCase(objFSO.GetExtensionName(strFileName)) = Ext Then 
19.
        Datum = objFile.DateLastModified 
20.
        If Datum < AltDatum Then 'alte Datei 
21.
            objApp.NameSpace(myZipFile).CopyHere objFile.Path 
22.
            'WScript.Echo "Alt: " & Datum & " " & strFileName' 
23.
            objCounterFile.WriteLine "Gezippt: " & Datum & " " & strFileName 
24.
            intAlteDatei = intAlteDatei + 1 
25.
            'warten, bis Datei in ZIP geschrieben wurde 
26.
            Do Until objApp.Namespace(myZIPFile).Items.Count = intAlteDatei  
27.
                WScript.Sleep 100 
28.
            Loop 
29.
            'objFile.Delete 'Datei löschen' 
30.
        Else 
31.
            'WScript.Echo "Neu: " & Datum & " " & strFileName' 
32.
        End If 
33.
    End If 
34.
Next 
35.
objCounterFile.WriteLine "Dateien gezippt: " & intAlteDatei
Danke!

Mit freundlichen Grüßen
Braindead
Bitte warten ..
Mitglied: bastla
29.05.2012 um 18:23 Uhr
Hallo Braindead!

Ungetestet:
01.
myFolder = "C:\Neuer Ordner\" 
02.
myZipFolder = "C:\Neuer Ordner\Sicherung\" 
03.
Ext = "bak" 'Kleinbuchstaben verwenden 
04.
Alter = 2 
05.
 
06.
CounterFile = "C:\Neuer Ordner\Sicherung\" & "\ZIPPEN am " & Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) & ".txt" 
07.
 
08.
Set objApp = CreateObject("Shell.Application") 
09.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
10.
Set objCounterFile = objFSO.CreateTextFile(counterFile) 
11.
 
12.
AltDatum = DateAdd("d", -Alter, Date) 
13.
 
14.
For Each objFile In objFSO.GetFolder(myFolder).Files 
15.
    strFileName = objFile.Name 
16.
    If LCase(objFSO.GetExtensionName(strFileName)) = Ext Then 
17.
        Datum = objFile.DateLastModified 
18.
        If Datum < AltDatum Then 'alte Datei 
19.
            'Name des ZIP-Files auf Basis des Originaldateinamens bilden 
20.
            myZipFile = myZipFolder & objFSO.GetBaseName(strFileName)& Date & ".zip" 
21.
            objFSO.CreateTextFile(myZIPFile).Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0)) 'ZIP-Datei erstellen 
22.
            objApp.NameSpace(myZipFile).CopyHere objFile.Path 
23.
            'WScript.Echo "Alt: " & Datum & " " & strFileName' 
24.
            objCounterFile.WriteLine "Gezippt: " & Datum & " " & strFileName 
25.
            intAlteDatei = intAlteDatei + 1 
26.
            'warten, bis Datei in ZIP geschrieben wurde 
27.
            Do Until objApp.Namespace(myZIPFile).Items.Count = 1 'nur eine Datei im ZIP-File 
28.
                WScript.Sleep 100 
29.
            Loop 
30.
            'objFile.Delete 'Datei löschen' 
31.
        Else 
32.
            'WScript.Echo "Neu: " & Datum & " " & strFileName' 
33.
        End If 
34.
    End If 
35.
Next 
36.
objCounterFile.WriteLine "Dateien gezippt: " & intAlteDatei
Da mir die Popups doch etwas nervig waren habe ich die ausgeklammert.
Um mich mal selbst zu zitieren:
Starten (wegen der Bildschirmausgaben) aus einer CMD-Shell per "cscript //nologo Scriptname.vbs"
Grüße
bastla
Bitte warten ..
Mitglied: Braindead
30.05.2012 um 09:41 Uhr
Guten Morgen,

gutes Selbstzitat :-P
Hab ich anscheinend überlesen. Geistige Umnachtung meinerseits!
Entschuldige!

Also es werden nun die Dateien einzelnd gezippt. Es wird allerdings kein weiterer Unterordner angelegt mit dem aktuellen Datum.
Ich habe mir daher ein paar Spielereien mit erstellen von Ordnern mit aktuellem Datum angeschaut und bin auf folgendem Code gestoßen

01.
Dim objFileSystem  
02.
Dim objShell  
03.
Dim szOrdner  
04.
Dim szRegKey  
05.
  
06.
WScript.Sleep 500  
07.
  
08.
Set objFileSystem = CreateObject("Scripting.FileSystemObject")  
09.
Set objShell = CreateObject("Wscript.Shell")  
10.
  
11.
' Ordner: Jahr-Monat  
12.
szOrdner = "O:\" & Right(Date,4) & "-" & Left(Date, 2)  
13.
If Not (objFileSystem.FolderExists(szOrdner)) Then objFileSystem.CreateFolder( _ 
14.
  szOrdner)  
15.
  
16.
' Unterordner: Tag  
17.
szOrdner = szOrdner & "\" & Mid(Date, 4, 2)  
18.
If Not (objFileSystem.FolderExists(szOrdner)) Then objFileSystem.CreateFolder( _ 
19.
  szOrdner)  
20.
  
21.
SzRegKey = "HKEY_CURRENT_USER\Software\HeadLight\GetRight\Config\DefaultDir" 
22.
ObjShell.RegWrite szRegKey,szOrdner 
Diesen habe ich noch wie folgt angepasst:
01.
Dim objFileSystem  
02.
Dim objShell  
03.
Dim szOrdner  
04.
  
05.
WScript.Sleep 500  
06.
  
07.
Set objFileSystem = CreateObject("Scripting.FileSystemObject")  
08.
Set objShell = CreateObject("Wscript.Shell")  
09.
  
10.
' Ordner: Jahr  
11.
szOrdner = "C:\Neuer Ordner\Sicherung\" & Right(Date,4)  
12.
If Not (objFileSystem.FolderExists(szOrdner)) Then objFileSystem.CreateFolder( _ 
13.
  szOrdner)  
14.
  
15.
' Unterordner: Monat-Tag  
16.
szOrdner = szOrdner & "\" & Mid(Date, 4, 2) & "-" & Left(Date, 2)  
17.
If Not (objFileSystem.FolderExists(szOrdner)) Then objFileSystem.CreateFolder( _ 
18.
  szOrdner) 
Damit die Datumsangaben passen und was das mit der Registry zu tun hat ist mir auch ein Rätsel

Ich habe dann diesen Codeschnipsel wie folgt eingebaut:
01.
myFolder = "C:\Neuer Ordner\" 
02.
myZipFolder = "C:\Neuer Ordner\Sicherung\" 
03.
Ext = "bak" 'Kleinbuchstaben verwenden 
04.
Alter = 5 
05.
Dim objFileSystem  
06.
Dim objShell  
07.
Dim szOrdner 
08.
 
09.
CounterFile = "C:\Neuer Ordner\Sicherung\" & "\ZIPPEN am " & Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) & ".txt" 
10.
 
11.
Set objApp = CreateObject("Shell.Application") 
12.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
13.
Set objCounterFile = objFSO.CreateTextFile(counterFile) 
14.
Set objFileSystem = CreateObject("Scripting.FileSystemObject")  
15.
Set objShell = CreateObject("Wscript.Shell")  
16.
  
17.
' Ordner: Jahr  
18.
szOrdner = "C:\Neuer Ordner\Sicherung\" & Right(Date,4)  
19.
If Not (objFileSystem.FolderExists(szOrdner)) Then objFileSystem.CreateFolder( _ 
20.
  szOrdner)  
21.
  
22.
' Unterordner: Monat-Tag  
23.
szOrdner = szOrdner & "\" & Mid(Date, 4, 2) & "-" & Left(Date, 2)  
24.
If Not (objFileSystem.FolderExists(szOrdner)) Then objFileSystem.CreateFolder( _ 
25.
  szOrdner)  
26.
 
27.
AltDatum = DateAdd("d", -Alter, Date) 
28.
 
29.
For Each objFile In objFSO.GetFolder(myFolder).Files 
30.
    strFileName = objFile.Name 
31.
    If LCase(objFSO.GetExtensionName(strFileName)) = Ext Then 
32.
        Datum = objFile.DateLastModified 
33.
        If Datum < AltDatum Then 'alte Datei 
34.
            'Name des ZIP-Files auf Basis des Originaldateinamens bilden 
35.
            myZipFile = "myZipFolder\szOrdner" & objFSO.GetBaseName(strFileName) & ".zip" 
36.
            objFSO.CreateTextFile(myZIPFile).Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0)) 'ZIP-Datei erstellen 
37.
            objApp.NameSpace(myZipFile).CopyHere objFile.Path 
38.
            'WScript.Echo "Alt: " & Datum & " " & strFileName' 
39.
            objCounterFile.WriteLine "Gezippt: " & Datum & " " & strFileName 
40.
            intAlteDatei = intAlteDatei + 1 
41.
            'warten, bis Datei in ZIP geschrieben wurde 
42.
            Do Until objApp.Namespace(myZIPFile).Items.Count = 1 'nur eine Datei im ZIP-File 
43.
                WScript.Sleep 100 
44.
            Loop 
45.
            'objFile.Delete 'Datei löschen' 
46.
        Else 
47.
            'WScript.Echo "Neu: " & Datum & " " & strFileName' 
48.
        End If 
49.
    End If 
50.
Next 
51.
objCounterFile.WriteLine "Dateien gezippt: " & intAlteDatei
Mein Problem ist nun, dass ich zwar Unterordner erhalte, aber der Zipteil komplett wegfällt.
Denke mal in Zeile 35 ist der Fehler. Vielleicht habe ich auch kompletten Mist gebaut
Wäre wieder für Deine Hilfe sehr dankbar!!! Ich hoffe es ist Ok wenn ich an Deinem Code so rumbastel.

Mit freundlichen Grüßen Braindead
Bitte warten ..
Mitglied: bastla
30.05.2012, aktualisiert um 11:25 Uhr
Hallo Braindead!

Dann bastle ich zur Strafe auch an Deinem Code herum :
01.
myFolder = "C:\Neuer Ordner\" 
02.
myZipFolder = "C:\Neuer Ordner\Sicherung\" 'besser: myFolder & "Sicherung\" 
03.
Ext = "bak" 'Kleinbuchstaben verwenden 
04.
Alter = 5 
05.
CounterFile = myZIPFolder & "\ZIPPEN am " & Year(Date) & "-" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) & ".txt" 
06.
 
07.
Set objApp = CreateObject("Shell.Application") 
08.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
09.
Set objShell = CreateObject("Wscript.Shell")  
10.
 
11.
Set objCounterFile = objFSO.CreateTextFile(counterFile) 
12.
 
13.
  
14.
' Ordner: Jahr  
15.
myZIPYearFolder = myZipFolder & Year(Date) 
16.
If Not objFSO.FolderExists(myZIPYearFolder) Then objFSO.CreateFolder(myZIPYearFolder)  
17.
  
18.
' Unterordner: Monat-Tag  
19.
myZIPDayFolder = myZIPYearFolder & "\" & Right("0" & Month(Date), 2) & "-" & Right("0" & Day(Date), 2) 
20.
If Not (objFSO.FolderExists(myZIPDayFolder)) Then objFSO.CreateFolder(myZIPDayFolder)  
21.
 
22.
AltDatum = DateAdd("d", -Alter, Date) 
23.
 
24.
For Each objFile In objFSO.GetFolder(myFolder).Files 
25.
    strFileName = objFile.Name 
26.
    If LCase(objFSO.GetExtensionName(strFileName)) = Ext Then 
27.
        Datum = objFile.DateLastModified 
28.
        If Datum < AltDatum Then 'alte Datei 
29.
            'Name des ZIP-Files auf Basis des Originaldateinamens bilden 
30.
            myZipFile = myZIPDayFolder & objFSO.GetBaseName(strFileName) & ".zip" 
31.
            objFSO.CreateTextFile(myZIPFile).Write "PK" & Chr(5) & Chr(6) & String(18, Chr(0)) 'ZIP-Datei erstellen 
32.
            objApp.NameSpace(myZipFile).CopyHere objFile.Path 
33.
            'WScript.Echo "Alt: " & Datum & " " & strFileName' 
34.
            objCounterFile.WriteLine "Gezippt: " & Datum & " " & strFileName 
35.
            intAlteDatei = intAlteDatei + 1 
36.
            'warten, bis Datei in ZIP geschrieben wurde 
37.
            Do Until objApp.Namespace(myZIPFile).Items.Count = 1 'nur eine Datei im ZIP-File 
38.
                WScript.Sleep 100 
39.
            Loop 
40.
            'objFile.Delete 'Datei löschen' 
41.
        Else 
42.
            'WScript.Echo "Neu: " & Datum & " " & strFileName' 
43.
        End If 
44.
    End If 
45.
Next 
46.
objCounterFile.WriteLine "Dateien gezippt: " & intAlteDatei
Anmerkungen:
Zu "Dim": Entweder alle vorkommenden Variablen deklarieren und als erste Zeile
Option Explicit
verwenden (damit es auffällt, wenn es eine nichtdeklarierte Variable - zB wegen eines Tippfehlers - gibt) oder gar keine Deklarationen vornehmen ...
Es genügt ein einziges "FileSystemObject".
Eine Stringzerlegung von "date" ist zwar ev einfacher durchzuführen als die Tages- und Monatszahlen per Funktion zu ermitteln und mit führender Null zu versehen, funktioniert aber nur bei passenden Systemeinstellungen für die Datumsdarstellung - die Funktionen liefern immer die richtigen Werte.
Variablennamen wie "myZIPDayFolder" finde ich aussagekräftiger als "szOrdner".
Hinsichtlich der Frage nach der Registry: Es wurde in dem von Dir gefundenen Script der erstellte Pfad in der Registry gespeichert (siehe "RegWrite") ...

Grüße
bastla
Bitte warten ..
Mitglied: Braindead
30.05.2012 um 12:55 Uhr
Hallo,

gerade getestet und wir sind dem gewünschten Endergebnis ganz nah.

Leider hat er immer noch die Zip-Files nicht in den Ordner mit der "Monats-Tag-Angabe" angelegt, sondern in den Jahresordner.

Mit der Anpassung in Zeile 30:
01.
myZipFile = myZIPDayFolder & "\" & objFSO.GetBaseName(strFileName) & ".zip"
erledigt er dies nun.

Ich glaube damit habe ich erst einmal das was ich mir gewünscht habe.

Die Frage bzgl. am Code basteln ist doch in heutiger Zeit nicht ganz unrelevant. Urheberrecht als Schlagwort Allerdings weiß ich da nicht wie das mit §-en bei Code vereinbar ist

Ich denke damit ist der Thread nun wirklich als gelöst anzusehen.
Ich freu mich und konnte ein bisschen vom Code begreifen, wenn mir auch vieles ein Rätsel bleibt.

Hast Du Informatik studiert oder in Sachen VB alles selbst angelernt?
Ich habe in der Ausbildung Anw. sagen wir mal nicht gemocht

Mit freundlichen Grüßen
Braindead

PS: Großes Lob an Dich für die Zeit und den Schweiß den Du investiert hast, obwohl das wohl "Billigkram" für Dich war.
Bitte warten ..
Mitglied: bastla
30.05.2012, aktualisiert um 15:19 Uhr
Hallo Braindead!

Was die rechtliche Situation angeht: Du darfst gerne den Code nutzen und natürlich verbessern - dass Du diese verbesserte Version dann auch anderen zu den gleichen Bedingungen zur Verfügung stellst, setze ich mal voraus ...
... wenn mir auch vieles ein Rätsel bleibt.
Bei Fragen einfach fragen.
Hast Du Informatik studiert oder in Sachen VB alles selbst angelernt?
Ja (etwas von beidem)

Grüße
bastla
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Ähnliche Inhalte
Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

Microsoft
Windows 10 logon script: alle Apps löschen (3)

Frage von thomasreischer zum Thema Microsoft ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

VB for Applications
gelöst VB Script nach gefundenem Wort die nächsten 4 Zeichen ersetzten (2)

Frage von deutsch73 zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...