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 Alte Dateien nach x Tagen löschen und dabei bestimmte Dateiendungen ausschließen

Mitglied: MeiSeed

MeiSeed (Level 1) - Jetzt verbinden

13.11.2007, aktualisiert 16.11.2007, 4964 Aufrufe, 9 Kommentare

HI @ all,

ich hab da mal eine Frage zu diesem Script der in Shell ist.

01.
'************************************************************
02.
' 
03.
' Löscht alle Dateien, die seit einem bestimmten Datum
04.
' nicht mehr geändert wurden
05.
'
06.
'************************************************************
07.

08.
Set fso = CreateObject("Scripting.FileSystemObject")
09.
Set WSHShell = WScript.CreateObject("WScript.Shell")
10.
On Error Resume Next
11.

12.

13.
'******* hier eigenen Bedürfnissen anpassen *****************
14.

15.
dim Verzeichnis(2)
16.
Verzeichnis(0) = "Z:\BtD\System_tgl\"
17.
Verzeichnis(1) = "z:\BtD\Exchange2003\"
18.
REM Verzeichnis(2) = "C:\Temp\Verlauf"
19.

20.
Aufheben    = 1 'Anzahl der Tage
21.

22.
'********Ende der Anpassungen********************************
23.

24.

25.
for n=0 to 2
26.
	Set ordner = fso.GetFolder(Verzeichnis(n))
27.
	heute = Date()
28.
	DeleteInFolder(ordner)
29.
next
30.

31.
Sub DeleteInFolder(ordner)
32.
	Set dateien = ordner.Files
33.
	' Alle Dateien in diesem Ordner abklappern
34.
	For Each datei In dateien
35.
	  If datei.DateLastModified < (heute - Aufheben) Then
36.
	    on error resume next
37.
	     datei.delete
38.
             if err and err<>70 then msgbox "Unerwarteter Fehler (Code="&err&")",16 : wscript.quit
39.
             on error goto 0
40.
	  End If
41.
   	 Next
42.

43.
   	 'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
44.
   	 For Each unter In ordner.SubFolders
45.
   	   DeleteInFolder(unter)
46.
    	   If (unter.SubFolders.Count + unter.Files.Count) = 0 Then
47.
               unter.Delete
48.
       End If
49.
    Next
50.
End Sub
51.
Hier mal meine Frage kann man den Script so ändern das er bestimmte Dateiendungen nicht löscht wie z.B. *.cfg oder kann man es nicht machen, wenn nicht könnte mir einer von euch einen link geben wo ich so einen Script finden könnte oder mir gleich so einen geben.
Wäre sehr nett von euch.

MFG:
MeiSeed
Mitglied: bastla
13.11.2007 um 12:44 Uhr
Hallo MeiSeed!

Das geänderte Script könnte etwa so aussehen:
01.
Set fso = CreateObject("Scripting.FileSystemObject")
02.
Set WSHShell = WScript.CreateObject("WScript.Shell")
03.
On Error Resume Next
04.

05.

06.
'* hier eigenen Bedürfnissen anpassen *
07.

08.
Verzeichnis = Array(_
09.
	"Z:\BtD\System_tgl\", _
10.
	"z:\BtD\Exchange2003\", _
11.
	"C:\Temp\Verlauf" _
12.
)
13.

14.
Exclude = ".cfg.ini.set" 'Endungen nicht zu löschender Dateien
15.
Aufheben = 1 'Anzahl der Tage
16.

17.
' * Ende der Anpassungen *
18.

19.
Heute = Date()
20.
For n = 0 To UBound(Verzeichnis) 
21.
	Set Ordner = fso.GetFolder(Verzeichnis(n))
22.
	DeleteInFolder(Ordner)
23.
Next
24.

25.
Sub DeleteInFolder(Ordner)
26.
Set Dateien = Ordner.Files
27.
' Alle Dateien in diesem Ordner abklappern
28.
For Each Datei In Dateien
29.
	If Datei.DateLastModified < (Heute - Aufheben) Then
30.
		Ext = Mid(Datei.Name, InStrRev(Datei.Name, "."))
31.
		If InStr(Exclude, Ext) = 0 Then
32.
			On Error Resume Next
33.
			Datei.Delete
34.
			If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit
35.
			On Error Goto 0
36.
		End If
37.
	End If
38.
Next
39.

40.
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
41.
For Each Unter In Ordner.SubFolders
42.
	DeleteInFolder(Unter)
43.
	If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete
44.
Next
45.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: MeiSeed
13.11.2007 um 13:32 Uhr
Danke dir für die antwort werd es mal testen ob es geht

gruß
MeiSeed
Bitte warten ..
Mitglied: MeiSeed
15.11.2007 um 09:30 Uhr
Das Script geht einbeifrei.

Ich hab aber noch eine kleine frage zu dem Script.

Kann man es irgentwie machen das man die Ordner und die nicht zu löschenden dateienendungen nicht in dem Script eintragen muss.

Sondern:

1. das man die in einer textdatei speichert und sich das Script die dann daraus holt.

oder

2. es wird eine messeg angezeigt wo mann die zu löschenden Dateien und Ordner eintragen kann.


gruß
MeiSeed
Bitte warten ..
Mitglied: bastla
15.11.2007 um 15:01 Uhr
Hallo MeiSeed!

Wenn Du in eine Textdatei jeweils einen Ordner je Zeile schreibst, kannst Du diese so lesen:
01.
strOrdnerliste = "D:\Sicherung\Ordnerliste.txt"
02.

03.
Set fso = CreateObject("Scripting.FileSystemObject")
04.
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste, 1)
05.

06.
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
07.

08.
objOrdnerliste.Close
Mit ".ReadAll" wird der gesamte Inhalt der Textdatei gelesen und mit "Split()" in ein Array aufgeteilt, wobei als Trennzeichen für die Aufteilung das Zeilenende ("vbCrLF") gilt. Als Ergebnis steht dann jede Zeile der Textdatei in einem Element des Arrays "Verzeichnis" und Du kannst den Rest des Programmes wie bisher verwenden.

Für die nicht zu löschenden Dateiendungen kannst Du eine weitere Textdatei erstellen und alle Endungen (wie im Script für die Variable "Exclude") in eine Zeile schreiben. Zum Auslesen kannst Du wie oben vorgehen, wobei Du allerdings nur die erste Zeile benötigst.
01.
strAusschlussliste = "D:\Sicherung\Ausschluss.txt"
02.

03.
Set fso = CreateObject("Scripting.FileSystemObject")
04.
Set objAusschlussliste = fso.OpenTextFile(strAusschlussliste, 1)
05.

06.
If Not objAusschlussliste.AtEndOfStream Then 'falls nicht schon am Dateiende (= Datei ist leer) ...
07.
	Exclude = objAusschlussliste.ReadLine ' ... erste Zeile lesen und speichern ...
08.
Else
09.
	Exclude = "" '... ansonsten gibt es keine Ausnahmen beim Löschen.
10.
End If
11.

12.
objAusschlussliste.Close
Das "Set fso=..." brauchst Du natürlich innerhalb eines Scripts nur einmal zu schreiben.

Grüße
bastla
Bitte warten ..
Mitglied: MeiSeed
16.11.2007 um 08:52 Uhr
hi bastla

irgent wie hab ich da ein fehler drin, weil wenn ich in der ordnerliste pro zeile ein ordner anlege wird nur die erste zeile gelöscht und nicht die andere die list er nicht aus.

Woran kann das liegen.

Und die nicht gelöscht sollen die gehen.


und ich hab es mal auch mal mit Input versucht aber wenn ich die Variable dann in die Array angebe und dann das Script ausführe bekomm ich die meldung das ich ein Ordner angeben soll das mach ich auch aber es wird dann nichts in dem Ordner gelöscht.

Warum wird das was in der Variable steht nicht in die Array übernommen.

Gruß
MeiSeed
Bitte warten ..
Mitglied: bastla
16.11.2007 um 09:57 Uhr
Hallo MeiSeed!

Die beiden Codeabschnitte sollen als Ersatz für die bisher im Script vorgenommenen Festlegungen dienen, also sähe der entsprechende Codeteil so aus:
01.
'* hier eigenen Bedürfnissen anpassen *
02.

03.
strOrdnerliste = "D:\Sicherung\Ordnerliste.txt"
04.
strAusschlussliste = "D:\Sicherung\Ausschluss.txt"
05.

06.
Set fso = CreateObject("Scripting.FileSystemObject")
07.

08.
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste, 1)
09.
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
10.
objOrdnerliste.Close
11.

12.
Set objAusschlussliste = fso.OpenTextFile(strAusschlussliste, 1)
13.
If Not objAusschlussliste.AtEndOfStream Then 'falls nicht schon am Dateiende (= Datei ist leer) ...
14.
	Exclude = objAusschlussliste.ReadLine ' ... erste Zeile lesen und speichern ...
15.
Else
16.
	Exclude = "" '... ansonsten gibt es keine Ausnahmen beim Löschen.
17.
End If
18.

19.
objAusschlussliste.Close
20.

21.
Aufheben = 1 'Anzahl der Tage
22.

23.
' * Ende der Anpassungen *
Eigentlich sollte mit dem dargestellten Code das Einlesen aller einzeln (zeilenweise) angegebenen Ordner gelingen.
Wenn Du mit einer InputBox arbeiten willst (die Eingabe steht dann zb in "strEingabe"), müstest Du diese Eingabe mit
01.
Verzeichnis = Array(strEingabe)
in das Array "Verzeichnis" stellen, damit der Rest des Programmes unverändert bleiben kann.

Grüße
bastla
Bitte warten ..
Mitglied: MeiSeed
16.11.2007 um 10:54 Uhr
Danke dir

Ich hab es jetzt mit der InputBox es geschaft.

Aber das mit den Textdateien klapt leider nicht ist abernicht schlimm weil mit InputBox ist es besser.

Und ich hab da noch ein prob gefunden.

Wenn ich jetzt den Ordner angeb in dem er alles löschen soll löscht er auch aber er löscht nicht die unterordner.
Bitte warten ..
Mitglied: bastla
16.11.2007 um 14:19 Uhr
Hallo MeiSeed!

Ich habe eben das Script in der folgenden Fassung (einzige Änderung gegenüber oben: "Set fso = ..." steht nur in der allerersten Scriptzeile) getestet und keine Problem hinsichtlich des Einlesens der Ordner oder hinsichtlich des Löschens von leeren Ordnern gefunden.
01.
Set fso = CreateObject("Scripting.FileSystemObject")
02.
Set WSHShell = WScript.CreateObject("WScript.Shell")
03.
On Error Resume Next
04.

05.
'* hier eigenen Bedürfnissen anpassen *
06.

07.
strOrdnerliste = "D:\Sicherung\Ordnerliste.txt"
08.
strAusschlussliste = "D:\Sicherung\Ausschluss.txt"
09.

10.
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste, 1)
11.
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
12.
objOrdnerliste.Close
13.

14.
Set objAusschlussliste = fso.OpenTextFile(strAusschlussliste, 1)
15.
If Not objAusschlussliste.AtEndOfStream Then 'falls nicht schon am Dateiende (= Datei ist leer) ...
16.
	Exclude = objAusschlussliste.ReadLine ' ... erste Zeile lesen und speichern ...
17.
Else
18.
	Exclude = "" '... ansonsten gibt es keine Ausnahmen beim Löschen.
19.
End If
20.

21.
objAusschlussliste.Close
22.

23.
Aufheben = 1 'Anzahl der Tage
24.

25.
' * Ende der Anpassungen *
26.

27.
Heute = Date()
28.
For n = 0 To UBound(Verzeichnis) 
29.
	Set Ordner = fso.GetFolder(Verzeichnis(n))
30.
	DeleteInFolder(Ordner)
31.
Next
32.

33.
Sub DeleteInFolder(Ordner)
34.
Set Dateien = Ordner.Files
35.
' Alle Dateien in diesem Ordner abklappern
36.
For Each Datei In Dateien
37.
	If Datei.DateLastModified < (Heute - Aufheben) Then
38.
		Ext = Mid(Datei.Name, InStrRev(Datei.Name, "."))
39.
		If InStr(Exclude, Ext) = 0 Then
40.
			On Error Resume Next
41.
			Datei.Delete
42.
			If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit
43.
			On Error Goto 0
44.
		End If
45.
	End If
46.
Next
47.

48.
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
49.
For Each Unter In Ordner.SubFolders
50.
	DeleteInFolder(Unter)
51.
	If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete
52.
Next
53.
End Sub
Grüße
bastla
Bitte warten ..
Mitglied: MeiSeed
16.11.2007 um 19:00 Uhr
Vielen vielen dank dir

gruß
MeiSeed
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Batch Datei: Dateiendung beibehalten, jedoch Dateiname Datei B wie Dateiname Datei A umbenennen

gelöst Frage von SchniefnaseBatch & Shell8 Kommentare

Hallo zusammen, ich habe eine Frage zu einer Batchdatei. Ich erhalte aus einer externen Verarbeitung stets 2 Dateien, isoliert ...

Microsoft Office

Word bestimmt Sprache selbst

gelöst Frage von honeybeeMicrosoft Office1 Kommentar

Hallo, habe in Word 2016 ein nerviges Problem: Auf meinem Computer (Windows 10) sind zwei Sprachen installiert: Deutsch und ...

Mac OS X

Safari öffnet bestimmt Seite nicht

Frage von tomi93Mac OS X2 Kommentare

Hallo , ich habe an einem iMac bei uns im Unternehmen das Problem das Safari dort eine bestimmte Seite ...

Windows 10

Standartprogramme nach Dateiendung bestimmen

gelöst Frage von tomaschkuWindows 103 Kommentare

Hallo erstmal, Ich habe das Problem, dass z.bzip Dateien beim Doppelklick standardmäßig mit dem Explorer geöffnet werden. Da dieser ...

Neue Wissensbeiträge
Windows 10

Windows 10 kann XPS erzeugen aber nicht anzeigen ????

Erfahrungsbericht von Deepsys vor 1 TagWindows 101 Kommentar

Heute schickt mir ein Kollegen eine E-Mail mit einer XPS-Datei vom Kunden im Anhang und fragt wie er diese ...

Exchange Server

1und1 IONOS: Probleme beim Mailversand mit Exchange

Information von reksierp vor 1 TagExchange Server3 Kommentare

Hallo, seit Do, 17.1.19 etwa Mittags nimmt 1und1 IONOS keine Mails mehr über den Standard-Port SMTP 25 an. Nachdem ...

LAN, WAN, Wireless

Cisco Mikrotik VPN Standort Vernetzung mit dynamischem Routing

Anleitung von aqui vor 2 TagenLAN, WAN, Wireless

1. Allgemeine Einleitung Das nachfolgende Tutorial ist eine Fortführung der hier bei Administrator.de schon bestehenden VPN Tutorials und beschreibt ...

Windows Mobile

Support für Windows Mobile endet im Dezember 2019

Information von transocean vor 3 TagenWindows Mobile1 Kommentar

Moin, Microsoft empfiehlt als Alternative den Umstieg auf iOS oder Android, wie man hier lesen kann. Gruß Uwe

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Wo lässt sich das Gateway in der FRITZ!Box 7360 einstellen?
gelöst Frage von OssabowLAN, WAN, Wireless18 Kommentare

Hallo all, nach gründlicher Suche scheine ich der einzige zu sein der das Problem hat (macht micht schon mal ...

Windows Server
Sicherung Domain Controller
gelöst Frage von Monto1Windows Server16 Kommentare

Hallo zusammen, wie sichert Ihr den Domain Controller? Selbst, wenn zwei parallel laufen, ist eine Sicherung doch mal nützlich. ...

Windows Server
MSSQL Backup in Form von .sql einspielen
Frage von janosch12Windows Server15 Kommentare

Guten Morgen, wir verwenden das Tool SQLandFTPBackup ( ) zum sichern einiger MSSQL Datenbanken. Nun sichert das Toll die ...

Microsoft Office
Office 2016 oder Office 2019
Frage von PeterzMicrosoft Office13 Kommentare

Hallo zusammen, wir müssen unser Office von 2010 auf eine neuere Version Umstellen. Jetzt stellt sich die Frage, ob ...