Mehrere Verzeichnisse in einen Script angeben
Hallo zusammen, ich brauche eure Hilfe.
Ich habe unten stehendes Script zum löschen ältere Dateien in einen Unterordner. Nun möchte ich das Skript über mehre Unterordner bzw. mehre Verzeichnisse laufen lassen. Wie bekomme ich mehre Verzeichnisse in diesen Script?
Oder ist es möglich in einen Ordner mit mehren Verknüfungen zu den Verzeichnisse zu verwenden?, So gebe ich nur ein Verzeichnis im Script an, gelöscht werden aber in den Verknüfungen befindliche Unterordner.
Verzeichnis = "\\test.com\Homedir\Max\Arbeitsauftrag"
Aufheben = 10
Set fso = CreateObject("Scripting.FileSystemObject")
Set ordner = fso.GetFolder(Verzeichnis)
heute = Date()
DeleteInFolder(ordner)
Sub DeleteInFolder(ordner)
Set dateien = ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each datei In dateien
If datei.DateLastModified < (heute - Aufheben) Then
datei.Delete
End If
Next
Set untere = ordner.SubFolders
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each unter In untere
DeleteInFolder(unter)
Next
End Sub
Ich habe unten stehendes Script zum löschen ältere Dateien in einen Unterordner. Nun möchte ich das Skript über mehre Unterordner bzw. mehre Verzeichnisse laufen lassen. Wie bekomme ich mehre Verzeichnisse in diesen Script?
Oder ist es möglich in einen Ordner mit mehren Verknüfungen zu den Verzeichnisse zu verwenden?, So gebe ich nur ein Verzeichnis im Script an, gelöscht werden aber in den Verknüfungen befindliche Unterordner.
Verzeichnis = "\\test.com\Homedir\Max\Arbeitsauftrag"
Aufheben = 10
Set fso = CreateObject("Scripting.FileSystemObject")
Set ordner = fso.GetFolder(Verzeichnis)
heute = Date()
DeleteInFolder(ordner)
Sub DeleteInFolder(ordner)
Set dateien = ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each datei In dateien
If datei.DateLastModified < (heute - Aufheben) Then
datei.Delete
End If
Next
Set untere = ordner.SubFolders
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each unter In untere
DeleteInFolder(unter)
Next
End Sub
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 292075
Url: https://administrator.de/contentid/292075
Ausgedruckt am: 22.11.2024 um 05:11 Uhr
17 Kommentare
Neuester Kommentar
Moin,
bitte Suchfunktion nutzen, wurde hier schon öfters abgehandelt
Datei auf Festplatte per VBA suchen und löschen ( access 2010)
Skript suche Ordner in Unterordner
usw...
Gruß jodel32
bitte Suchfunktion nutzen, wurde hier schon öfters abgehandelt
Datei auf Festplatte per VBA suchen und löschen ( access 2010)
Skript suche Ordner in Unterordner
usw...
DEINORDNER = "\\test.com\Homedir\Max\Arbeitsauftrag"
SUCHE_IN_UNTERORDNERN = True
olddate = DateAdd("d", -10, Date)
set objFS = CreateObject("Scripting.FilesystemObject")
parseFolders objFS.GetFolder(DEINORDNER),SUCHE_IN_UNTERORDNERN
Function parseFolders(strFldr,boolRecursion)
for each myFile in strFldr.Files
If myFile.DateCreated < olddate then
myFile.Delete
End If
Next
If boolRecursion Then
For Each subFolder in strFldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Das Skript löscht alle Verknüpfungen älter als 10 Tage in einem Verzeichnis und berücksichtigt selbstverständlich auch alle Verknüpfungen in allen Unterordnern Rekursiv...
Sag schreib das doch gleich so in deinen Beitrag oder kommt jetzt noch mehr unbekanntes ans Tageslicht ? ... dann ist die Verknüpfung aber auch tot
Dass hier macht das beschriebene. Ich gehe hier davon aus das deine Verknüpfungen, Verknüpfungen zu Dateien sind...
Dass hier macht das beschriebene. Ich gehe hier davon aus das deine Verknüpfungen, Verknüpfungen zu Dateien sind...
DEINORDNER = "\\test.com\Homedir\Max\Arbeitsauftrag"
SUCHE_IN_UNTERORDNERN = True
olddate = DateAdd("d", -10, Date)
set objFS = CreateObject("Scripting.FilesystemObject")
Set objShell = CreateObject("Wscript.Shell")
parseFolders objFS.GetFolder(DEINORDNER),SUCHE_IN_UNTERORDNERN
Function parseFolders(strFldr,boolRecursion)
for each myFile in strFldr.Files
' Wenn Datei ein Link ist ...
If LCase(objFS.GetExtensionName(myFile.Name)) = "lnk" then
' Zielpfad des Links auslesen
target = objShell.CreateShortcut(myFile.Path).TargetPath
' Wenn Zieldatei existiert ...
If objFS.FileExists(target) Then
' und Änderungs-Datum älter als X Tage ist lösche Datei
If objFS.GetFile(target).DateLastModified < olddate Then
objFS.DeleteFile target,True
End If
End If
End If
Next
'Für jeden Unterordner, rufe die Funktion rekursiv erneut auf.
If boolRecursion Then
For Each subFolder in strFldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Geht hier wie immer einwandfrei, wurde ja getestet ...
Du nutzt aber schon simple *.lnk Files oder arbeitest du hier mit Softlinks oder Junctions ?
Du nutzt aber schon simple *.lnk Files oder arbeitest du hier mit Softlinks oder Junctions ?
Mal wieder typisches Beispiel von blindem kopieren, hättest du meinen Post mit dem Code vollständig gelesen hättest du dort rauslesen können das dieses nur Verknüpfungen zu Dateien und nicht zu Ordnern unterstützt.
Für Ordner muss man es natürlich noch anpassen. Aber das mach ich erst wenn du jetzt endlich mal mit allen Details deines Vorhabens rausrückst damit hier nicht immer wieder neue Details ans Licht kommen die ich mit meiner Glaskugel nicht kenne, Monsieur !! Also bitte. Danke.
Kann es sein, dass das Skript nur in das erste Unterverzeichnis geht?
Nein, der Ordner in dem die Verknüpfungen liegen werden rekursiv nach Verknüpfungen untersucht.Für Ordner muss man es natürlich noch anpassen. Aber das mach ich erst wenn du jetzt endlich mal mit allen Details deines Vorhabens rausrückst damit hier nicht immer wieder neue Details ans Licht kommen die ich mit meiner Glaskugel nicht kenne, Monsieur !! Also bitte. Danke.
DEINORDNER = "\\test.com\Homedir\Max\Arbeitsauftrag"
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
' Wenn Datei ein Link ist ...
If LCase(objFS.GetExtensionName(myFile.Name)) = "lnk" then
' Zielpfad des Links auslesen
target = objShell.CreateShortcut(myFile.Path).TargetPath
' Wenn Zielpfad existiert ...
If objFS.FolderExists(target) Then
'Entferne im Zielpfad rekursiv alle älteren Dateien
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 Then
objFS.DeleteFile f.Path,True
End If
Next
For Each subFolder in strFldr.SubFolders
RemoveOldFiles subFolder
Next
End Function
s. Skript im letzten Post. Es wird das LastModifiedDate herangezogen, wenn du stattdessen das DateCreated Datum für die Auswertung heranziehen willst ändere das in Zeile 29
geht einwandfrei.
If f.DateCreated < olddate Then
Schon mal was von MsgBox gehört ?!
Hirn einschalten ....
msgbox "Fertig"
Einfach die IF-Bedingung im Skript Zeile 29 so ändern:
Wie wär's ab und zu mal mit lesen...
http://www.w3schools.com/asp/vbscript_default.asp
If f.DateLastModified < olddate and not InStr(1,f.Name,"schutz") > 0 and Left(objFS.GetParentFolderName(f.Path),12) = "Mitteilungen" Then
Wie wär's ab und zu mal mit lesen...
http://www.w3schools.com/asp/vbscript_default.asp
[OT]
Moin Knuefi,
ich habe mir jetzt doch mal diesen Beitrag und auch die anderen Beiträge angeschaut.
Dabei sind mir positive Punkte und einige andere mit Verbesserungspotential aufgefallen,
Deshalb möchte ich hier mal einschreiten als Moderator.
Positiv werte ich:
- du gibst Feedback, beantwortest Rückfragen, setzt auch die Beiträge auf "Gelöst", wenn eine Lösung erarbeitet wurde.
Ein bisschen Luft nach oben sehe ich dagegen bei diesen Punkten:
- die anfängliche Problembeschreibung müssen in jedem deiner Beiträge erst durch mehrfache Rückfragen von Hilfswilligen geklärt werden
- in jedem Beitrag tröpfeln so nach und nach immer weitere Zusatzanforderungen und neue Randbedingungen nach, so dass Titel und Inhalt des Beitrags sehr auseinanderlaufen
- du verwendest nie Codeformatierung beim Posten von Codeschnipseln.
Du hast in einem anderen Beitrag sinngemäß geschrieben "Ein Forum ist immer so gut wie seine Mitglieder.".
Das gilt aber nicht nur für die Antwortenden, sondern auch für die Fragesteller.
Bitte versuche in künftigen Fragen eine vollständige und klare Formulierung in der Problembeschreibung und bleibe dann auch beim ursprünglich angegebenen Thema.
Und verwende zur Lesbarkeit von Codeschipseln auch Codeformatierung.
Diese Frage hier -die du ja auch schon auf "Gelöst" gesetzt hast - schliesse ich jetzt.
Grüße
Biber
[/OT]
Moin Knuefi,
ich habe mir jetzt doch mal diesen Beitrag und auch die anderen Beiträge angeschaut.
Dabei sind mir positive Punkte und einige andere mit Verbesserungspotential aufgefallen,
Deshalb möchte ich hier mal einschreiten als Moderator.
Positiv werte ich:
- du gibst Feedback, beantwortest Rückfragen, setzt auch die Beiträge auf "Gelöst", wenn eine Lösung erarbeitet wurde.
Ein bisschen Luft nach oben sehe ich dagegen bei diesen Punkten:
- die anfängliche Problembeschreibung müssen in jedem deiner Beiträge erst durch mehrfache Rückfragen von Hilfswilligen geklärt werden
- in jedem Beitrag tröpfeln so nach und nach immer weitere Zusatzanforderungen und neue Randbedingungen nach, so dass Titel und Inhalt des Beitrags sehr auseinanderlaufen
- du verwendest nie Codeformatierung beim Posten von Codeschnipseln.
Du hast in einem anderen Beitrag sinngemäß geschrieben "Ein Forum ist immer so gut wie seine Mitglieder.".
Das gilt aber nicht nur für die Antwortenden, sondern auch für die Fragesteller.
Bitte versuche in künftigen Fragen eine vollständige und klare Formulierung in der Problembeschreibung und bleibe dann auch beim ursprünglich angegebenen Thema.
Und verwende zur Lesbarkeit von Codeschipseln auch Codeformatierung.
Diese Frage hier -die du ja auch schon auf "Gelöst" gesetzt hast - schliesse ich jetzt.
Grüße
Biber
[/OT]