knuefi
Goto Top

Script zum Löschen Dateien äter X aber nicht im Unterordner XY

Hallo ich habe das unten stehende Script zum Löschen von Dateien die älter 10 Tage sind, soweit läuft es.
Nun habe ich folgendes Problem:
durch die Einbindung SUCHE_IN_UNTERORDNERN = True werden auch die Unterordner bei der Suche Eingebunden, das ist auch so gewünscht.
Nun habe ich in einen bestimmten Unterordner (Apfel) in dem sich Dateien (Name enthält immer das Wort Musik) befinden die nicht gelöscht werden sollen, diese werden aber gelöscht.
Wie kann ich das verhindern?

Set shell = WScript.CreateObject("WScript.Shell")  
answer=MsgBox("Starte mit der Funktion: Lösche Inhalte im Ordner Test die älter 10 Tage sind", vbYesNo,"Frage")  
if answer = vbyes then
CreateObject("WScript.Shell").Popup "Starte mit der Löschung",3, "Information"  
DEINORDNER = "D:\Test"  
SUCHE_IN_UNTERORDNERN = True
olddate = DateAdd("d", -10, Date)  
set objFS = CreateObject("Scripting.FilesystemObject")  
Set objShell = CreateObject("Wscript.Shell")  
parseFolders objFS.GetFolder(DEINORDNER)
Function parseFolders(strFldr)
for each myFile in strFldr.Files
If LCase(objFS.GetExtensionName(myFile.Name)) = "lnk" then  
target = objShell.CreateShortcut(myFile.Path).TargetPath & "\Birne"  
If objFS.FolderExists(target) Then
RemoveOldFiles objFS.GetFolder(target)
End If
End If
Next
For Each subFolder in strFldr.SubFolders
parseFolders subFolder
Next
End Function
Function RemoveOldFiles(strFldr)
For Each f In strFldr.Files
If f.DateLastModified < olddate and not InStr(1,f.Name,"*Musik*") > 0 Then  
objFS.DeleteFile f.Path,True
End If
Next
For Each subFolder in strFldr.SubFolders
RemoveOldFiles subFolder
Next
End Function 
MsgBox "Fertig mit der Löschung"  
else
CreateObject("WScript.Shell").Popup "Abruch, nichts gelöscht",3, "Information"  
end if

Content-ID: 380919

Url: https://administrator.de/contentid/380919

Ausgedruckt am: 25.11.2024 um 04:11 Uhr

emeriks
Lösung emeriks 20.07.2018 um 17:13:36 Uhr
Goto Top
Hi,
statt
InStr(1,f.Name,"*Musik*")  
so
InStr(1,f.Name,"Musik")  

E.
Knuefi
Knuefi 20.07.2018 um 17:57:58 Uhr
Goto Top
Das ist leider nicht so einfach. Der Dateiname ist nicht immer Musik, sondern beinhalten das Wort Musik. Beispiel: 01.01.2018 Musik Top 10.
Deshalb *Musik*
rubberman
rubberman 20.07.2018 um 18:59:15 Uhr
Goto Top
Wenn du dir mal eine Referenz zur InStr Funktion angesehen hättest, wüsstest du dass @emeriks Recht hat. Wird der String "Musik" gefunden, dann wird die Position zurückgegeben, an der der erste Buchstabe (also das M) gefunden wurde. Anderenfalls gibt InStr 0 zurück. Keine Ahnung was du mit den Sternchen willst. Du brauchst für diese Funktion keine Wildcards und die Funktion würde sie auch nicht unterstützen.

Steffen
emeriks
emeriks 20.07.2018 aktualisiert um 19:45:09 Uhr
Goto Top
Das ist leider nicht so einfach. Der Dateiname ist nicht immer Musik, sondern beinhalten das Wort Musik. Beispiel: 01.01.2018 Musik Top 10.
Deshalb *Musik*
Anstatt einfach mal zu testen ....
it-frosch
it-frosch 23.07.2018 um 09:25:06 Uhr
Goto Top
Hallo Knuefi,

für das Rotieren von Dateien, denn umsolches handelt es sich hier ja wohl, verwende ich am liebsten die
delage32.exe.

Benutzung:
:: Backup die älter als 2 Tage werden gelöscht
F:\Pfad_zur_delage32_exe\delage32.exe "F:\Ordner\*.*" 2

Wenn das aber ein Powershell Übung werden sollte, dann habe ich nichts gesagt. face-wink

grüße vom it-frosch
Knuefi
Knuefi 23.07.2018 um 14:28:02 Uhr
Goto Top
Asche auf mein Haupt, klappt doch ohne *. Sorry!!!!!!!!!!
Danke Euch
@:it-frosch Danke für dein Tipp
rubberman
rubberman 23.07.2018 aktualisiert um 19:02:32 Uhr
Goto Top
Hehe, an deinem Stil musst du aber noch ein bisschen feilen. Dein Code ist wegen fehlender Einrückungen fast nicht lesbar. Du hast Funktionen einfach mitten im Hauptcode stehen, ohne dass eine Abgrenzung zu sehen wäre. Du referenzierst das "WScript.Shell" Objekt viermal (wenn ich mich nicht verzählt habe). Und ...
durch die Einbindung SUCHE_IN_UNTERORDNERN = True werden auch die Unterordner bei der Suche Eingebunden
... nee, du nutzt diese Variable nirgends in deinem gesamten Code.

Steffen