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

Auch Ordner per vbs löschen, Logfile erstellen und per Email versenden

Frage Entwicklung

Mitglied: anfaenger500

anfaenger500 (Level 1) - Jetzt verbinden

06.03.2011 um 19:36 Uhr, 5649 Aufrufe, 8 Kommentare

Hallo Forumteilnehmer,
ich habe hier ein Script was mir mal ein Bekannter zusammengebastelt hatte.

Ich selber kann kein VB und wollte deshalb bei euch anfragen, ob ihr mir bitte weiterhelfen könnt.

Beim Script möchte ich gern auch Ordner löschen können statt nur Dateien.
Desweiteren hatte ich mir vorgestellt, dass mir nach erfolgter Löschung ein Logfile erzeugt wird und dieses dann per E-Mail versendet wird.

Mir ist bewusst, dass das Forum dazu dient um zu lernen, aber mir fehlen ja schon die Basics und daher hoffe ich auf eure Mithilfe.

Vielen Dank schonmal.

01.
 
02.
'************************************************************************* 
03.
'  
04.
'Dateien die älter als intTage sind löschen 
05.
06.
'DateLastModified=Änderungsdatum; DateCreated=Erstellungsdatum 
07.
'WScript.Echo intZahl & " Dateien gelöscht." (Ausgabe gelöschter Dateien 
08.
09.
'************************************************************************* 
10.
 
11.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
12.
strOrdner = "D:\"			'Ordnerpfad angeben 
13.
strExtension = ""	 
14.
intTage = 1				'Anzahl der Tage angeben 
15.
 
16.
Set objOrdner = objFSO.GetFolder(strOrdner) 
17.
intZahl = 0 
18.
For Each objDatei In objOrdner.Files 
19.
    If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) _  
20.
        And DateDiff("d", objDatei.DateLastModified, Now) > intTage Then 
21.
        objDatei.Delete 
22.
        intZahl = intZahl + 1 
23.
    End If 
24.
Next
Mitglied: bastla
06.03.2011 um 20:27 Uhr
Hallo anfaenger500!

Um auch Unterordner zu löschen, wäre etwa folgender (ungetesteter) Zusatz erforderlich:
01.
For Each objUnterordner In objOrdner.SubFolders 
02.
    If DateDiff("d", objUnterordner.DateLastModified, Now) > intTage Then 
03.
        objUnterordner.Delete 
04.
        intOrdner = intOrdner + 1 
05.
    End If 
06.
Next 
07.
WScript.Echo intOrdner & " Ordner gelöscht."
Hier wird nur auf das Alter abgestellt - eine Überprüfung des Namens wäre aber analog zum obigen Ansatz ebenfalls möglich ...

Grüße
bastla
Bitte warten ..
Mitglied: anfaenger500
07.03.2011 um 22:53 Uhr
Hallo bastla,

habe den Code man angepasst und ausgeführt.

Nur leider passiert da gar nichts.

Könntest du mir bitte nochmal helfen!

Danke und Gruß

01.
'************************************************************************* 
02.
'  
03.
'Dateien die älter als intTage sind löschen 
04.
05.
'DateLastModified=Änderungsdatum; DateCreated=Erstellungsdatum 
06.
'WScript.Echo intZahl & " Dateien gelöscht." (Ausgabe gelöschter Dateien 
07.
08.
'************************************************************************* 
09.
 
10.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
11.
strOrdner = "C:\Sicherungsordner"			'Ordnerpfad angeben 
12.
strExtension = ""	 
13.
intTage = 1				'Anzahl der Tage angeben 
14.
 
15.
Set objOrdner = objFSO.GetFolder(strOrdner) 
16.
intZahl = 0 
17.
For Each objDatei In objOrdner.Files 
18.
    If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) _  
19.
        And DateDiff("d", objDatei.DateLastModified, Now) > intTage Then 
20.
        objDatei.Delete 
21.
        intZahl = intZahl + 1 
22.
    End If 
23.
Next 
24.
  
25.
For Each objUnterordner In objOrdner.SubFolders  
26.
    If DateDiff("d", objUnterordner.DateLastModified, Now) > intTage Then  
27.
    	objUnterordner.Delete  
28.
    	intOrdner = intOrdner + 1  
29.
    End If  
30.
Next 
Bitte warten ..
Mitglied: bastla
08.03.2011 um 07:41 Uhr
Hallo Anfaenger500!

Versuch es mit der folgenden - um ein wenig Dokumentation erweiterten, aber immer noch ungetesteten - Variante:
01.
For Each objUnterordner In objOrdner.SubFolders 
02.
    Doku = Doku & vbCrLf & DateDiff("d", objUnterordner.DateLastModified, Now) & vbTab & objUnterordner.Name 
03.
    If DateDiff("d", objUnterordner.DateLastModified, Now) > intTage Then 
04.
    	objUnterordner.Delete 
05.
    	intOrdner = intOrdner + 1 
06.
    End If 
07.
Next 
08.
WScript.Echo Mid(Doku, 3)
Es wird für jeden Unterordner das ermittelte Alter angezeigt ...

Grüße
bastla
Bitte warten ..
Mitglied: anfaenger500
08.03.2011 um 17:44 Uhr
Hallo bastla,

habe das Script wie folgt erweitert:

01.
'************************************************************************* 
02.
'  
03.
'Dateien die älter als intTage sind löschen 
04.
05.
'DateLastModified=Änderungsdatum; DateCreated=Erstellungsdatum 
06.
'WScript.Echo intZahl & " Dateien gelöscht." (Ausgabe gelöschter Dateien) 
07.
08.
'************************************************************************* 
09.
 
10.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
11.
strOrdner = "D:\"			'Ordnerpfad angeben 
12.
strExtension = ""	 
13.
intTage = 1				'Anzahl der Tage angeben 
14.
 
15.
Set objOrdner = objFSO.GetFolder(strOrdner) 
16.
intZahl = 0 
17.
For Each objDatei In objOrdner.Files 
18.
    If LCase(Right(objDatei.name, Len(strExtension))) = LCase(strExtension) _  
19.
        And DateDiff("d", objDatei.DateLastModified, Now) > intTage Then 
20.
        objDatei.Delete 
21.
        intZahl = intZahl + 1 
22.
    End If 
23.
Next 
24.
 
25.
For Each objUnterordner In objOrdner.SubFolders  
26.
 
27.
    Doku = Doku & vbCrLf & DateDiff("d", objUnterordner.DateLastModified, Now) & vbTab & objUnterordner.Name  
28.
 
29.
    If DateDiff("d", objUnterordner.DateLastModified, Now) > intTage Then  
30.
 
31.
       objUnterordner.Delete  
32.
 
33.
       intOrdner = intOrdner + 1  
34.
 
35.
    End If  
36.
 
37.
Next  
38.
 
39.
WScript.Echo Mid(Doku, 3)
Nur leider bekomme ich da folgende Fehlermeldung:

Kann leider keine Bilder hochladen, daher schreibe ich es mal so ab.
Zeile: 32
Zeichen: 8
Fehler: Erlaubnis verweigert
Code: 800A0046
Quelle: Laufzeitfehler in Microsoft VBScript

Ist echt doof, wenn man die Scprache nicht kann.

Danke und Gruß
Bitte warten ..
Mitglied: bastla
08.03.2011 um 17:55 Uhr
Hallo anfaenger500!
Ist echt doof, wenn man die Scprache nicht kann.
"Erlaubnis verweigert" (dürfte sich auf die "Lösch"-Zeile, gepostet als Zeile 31, beziehen) bedarf aber doch eigentlich keiner Übersetzung ...

Wenn Du das Script aus der CMD-Shell mit
cscript C:\Scriptordner\Scriptname.vbs
startest, könntest Du den letzten Teil (ab Zeile 25) auf
01.
For Each objUnterordner In objOrdner.SubFolders  
02.
    If DateDiff("d", objUnterordner.DateLastModified, Now) > intTage Then  
03.
        WScript.Echo "Lösche jetzt " & objUnterordner.Name 
04.
        objUnterordner.Delete  
05.
    End If  
06.
Next 
ändern und Dir jeweils den zu löschenden Ordner vorweg anzeigen lassen, damit Du erkennen kannst, welcher Ordner (jetzt / von Dir) nicht gelöscht werden kann ...

Grüße
bastla
Bitte warten ..
Mitglied: Biber
08.03.2011 um 18:59 Uhr
Moin anfaenger500 und bastla,

ich lese diesen Thread auch von Beginn an mit... und immer mit etwas Skepsis.

Ich würde wirklich die zuletzt von bastla geposteten Zeile noch weiter entschärfen durch ein Auskommentieren der Zeile 4, also des .delete-Befehls.

bis wirklich auch klar ist, was denn passieren würde, wenn über den in (ein Skript vorher in Zeile 11) stehenden
strOrdner = "D:\" 'Ordnerpfad angeben
...drübergewalzt wird.
Ob das so wirklich der echte Plan ist, da alles zu löschen, was sich seit einem Tag nicht bewegt hat...

Ich halte es für KEINE gute Idee, ein VBS-Löschskript auf dem Rechner zu haben, wenn der Inhalt noch nicht vollständig klar und nachvollziehbar ist.

@anfaenger500:
Das soll keine Abwertung deiner Fähigkeiten sein, aber .... du fängst ja gerade an mit VBS-Krams.
Und Löschen per Skript ist zumindest unter Windows nicht die beste Spielwiese.

Grüße
Biber
Bitte warten ..
Mitglied: anfaenger500
09.03.2011 um 23:13 Uhr
Hallo Biber,

vielen Dank für deinen Beitrag, aber wie würdest du folgende Anforderung lösen?

Das ganze soll automatisch und nachts vollzogen werden.

Alle Backups und D:\ sollen nach voreingestellter Zeitangabe (Tage) gelöscht werden, damit mir die Platte nicht vollläuft.

Bin wirklich für alle Vorschläge offen. Nur so kann man effektiv dazuz lernen.

Danke und Grüße
Bitte warten ..
Mitglied: Biber
10.03.2011 um 08:50 Uhr
Moin anfaenger500,

meinen ersten Schritt habe ich schon genannt - ich würde -eigentlich immer, noch immerer bei Löschskripten erstmal einen <proof-of-concept mit einer ECHO bzw. WScript.echo-Ausgabe machen, um zu sehen, was passieren würde.

Ich weiss, dass das ein sehr banaler Vorschlag ist, aber denke dennoch, dass er dir durchaus ein paar Probleme vom Hals halten könnte

Grüße
Biber
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(1)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Apache Server
gelöst OsTicket Email versenden klappt nicht (5)

Frage von ClepToManix zum Thema Apache Server ...

Visual Studio
gelöst Email Versenden Mit VB (2)

Frage von UltraZz zum Thema Visual Studio ...

Datenbanken
gelöst Access Report per Email versenden, hat jemand zufällig einen Code dafür(VBA) (7)

Frage von Dr.Cornwallis zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (14)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...