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

Alte Dateien nach x Tagen löschen und dabei bestimmte Dateiendungen ausschließen

Frage Entwicklung Batch & Shell

Mitglied: MeiSeed

MeiSeed (Level 1) - Jetzt verbinden

13.11.2007, aktualisiert 16.11.2007, 4864 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 ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
14 Tage alte Dateien automatisch löschen - Shell (1)

Frage von traller zum Thema Batch & Shell ...

Batch & Shell
gelöst älteste dateien via batch löschen (6)

Frage von cali169 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell: Dateien nach Version löschen in mehreren Ordnern (4)

Frage von ImmerKind zum Thema Batch & Shell ...

Batch & Shell
gelöst Dateien mit Powershell löschen und nur leere (symbolische) Datei hinterlassen (6)

Frage von evolution zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...