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

Frage Entwicklung Batch & Shell

Mitglied: MeiSeed

MeiSeed (Level 1) - Jetzt verbinden

13.11.2007, aktualisiert 16.11.2007, 4896 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
Windows Server
Dateien per Batch löschen, älter als X Tage
gelöst Frage von deniska93Windows Server3 Kommentare

Hallo, ich möchte gerne bei einem Kunden per Batch Datei in einem bestimmten Ordner alle Dateien löschen, die älter ...

Batch & Shell
Alle Datein löschen die älter als x Tage sind
Frage von Roadrunner0815Batch & Shell3 Kommentare

Hallo an Alle! Ich brauche mal einen kleinen Denkanstoß zu folgender Problemstellung Ich möchte: - auf einem Laufwerk K: ...

Windows Server
Dateien löschen mit Forfiles, welche älter als x Tage sind
Frage von kellbiddenWindows Server4 Kommentare

Hallo Ich habe ein Script geschrieben, um Unterverzeichnise in einem Folder zu löschen. Dazu habe ich ForFile benutzt. ForFile.exe ...

Batch & Shell
Powershell: Ein Verzeichnis löschen, wenn eine spezielle Datei darin älter ist, als X Tage
gelöst Frage von fraggle666Batch & Shell4 Kommentare

Hallo zusammen, ich bin gerade dabei einen sehr großen Roaming Profile Share zu bereinigen. 60% aller dort gelisteten Profile ...

Neue Wissensbeiträge
Batch & Shell

Open Object Rexx: Eine mittlerweile fast vergessene Skriptsprache aus dem Mainframebereich

Information von Penny.Cilin vor 8 StundenBatch & Shell8 Kommentare

Ich kann mich noch sehr gut an diese Skriptsprache erinnern und nutze diese auch heute ab und an noch. ...

Humor (lol)

"gimme gimme gimme": Automatischer Test stolpert über Easter Egg im man-Tool

Information von Penny.Cilin vor 10 StundenHumor (lol)6 Kommentare

Interessant, was man so alles als Easter Egg implementiert. Ist schon wieder Ostern? "gimme gimme gimme": Automatischer Test stolpert ...

MikroTik RouterOS

Mikrotik - Lets Encrypt Zertifikate mit MetaROUTER Instanz auf dem Router erzeugen

Anleitung von colinardo vor 1 TagMikroTik RouterOS8 Kommentare

Einleitung Folgende Anleitung ist aus der Lage heraus entstanden das ein Kunde auf seinem Mikrotik sein Hotspot Captive Portal ...

Sicherheit

Sicherheitslücke in HP-Druckern - Firmware-Updates stehen bereit

Information von BassFishFox vor 1 TagSicherheit1 Kommentar

Ein weiterer Grund, dass Drucker keinerlei Verbindung nach "auswaerts" haben sollen. Unter Verwendung spezieller Malware können Angreifer aus der ...

Heiß diskutierte Inhalte
Windows Server
RDP macht Server schneller???
Frage von JaniDJWindows Server17 Kommentare

Hallo Community, wir betrieben seit geraumer Zeit diverse virtuelle Maschinen und Server mit Windows Server 2012. Leider haben wir ...

Windows 10
Windows 10 dunkler Bildschirm nach Umfallen
Frage von AkcentWindows 1015 Kommentare

Hallo, habe hier einen Windows 10 Rechner der von einem User umgefallen wurde (Beine übers Knie, an den PC ...

Windows 10
Bitlocker nach Verschlüsselung nicht mehr aufrufbar!
gelöst Frage von alexlazaWindows 1013 Kommentare

Hallo, ich besitze ein HP ZBook 17 G4 mit einem Windows 10 Pro Betriebssystem. Bei diesem Problem handelt sich, ...

Batch & Shell
Neuste Datei via PowerShell kopieren
gelöst Frage von kaiuwe28Batch & Shell11 Kommentare

Hallo zusammen, ich hatte mir mit Hilfe der Suche im Forum einen kleinen Code von colinardo rausgesucht und versucht ...