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

per VB Script leere (Unter)ordner löschen

Frage Entwicklung VB for Applications

Mitglied: Marcel1981

Marcel1981 (Level 1) - Jetzt verbinden

22.04.2009, aktualisiert 18.10.2012, 8040 Aufrufe, 12 Kommentare

Hallo, bin schon länger im Netz und in meinem Gehirn auf der Suche, welches Dateien UND UNTERORDNER in einem von mir gewählten VZ löscht.
Mit Dateien funktioniert das einwandfrei, allerdings werden die dann leergewordenen (Unter)ordner nicht gelöscht.
Dies sollte eigentlich im unteren Teil des Scriptes passieren. Wo ist der (Denk)fehler?


'*
'
' Löscht alle Dateien, die seit einem bestimmten Datum
' nicht mehr geändert wurden (in diesem Bsp. ein Tag bzw. 24h)
'
'*
'
'*
dim fso
dim Verzeichnis(1)
Verzeichnis(0) = "D:\Temp\*"
Verzeichnis(1) = "D:\Temp1\*"

Aufheben = 1 'Anzahl Tage

'*

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

for n=0 to 2
Set ordner = fso.GetFolder(Verzeichnis(n))
jetzt = now()
DeleteInFolder(ordner)
next

Sub DeleteInFolder(ordner)
Set dateien = ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each datei In dateien
If datei.DateLastModified < (jetzt) Then
on error resume next
datei.delete
End If
Next
Set untere = ordner.SubFolders
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each unter In untere
If Unter.DateCreated < (jetzt) Then
DeleteInFolder(Unter)
End If
Next
End Sub
'*
Mitglied: AndreasHoster
22.04.2009 um 15:42 Uhr
Ich sehe nicht, wo Du Ordner löschen willst, ich sehe nur ein datei.delete.
Bitte warten ..
Mitglied: Marcel1981
22.04.2009 um 15:46 Uhr
Jetzt wo dus sagst ;)
Syntax?
Bitte warten ..
Mitglied: AndreasHoster
22.04.2009 um 16:06 Uhr
Syntax: unter.delete
Allgemein: FolderObjekt.delete

Du müsstest halt vorher schauen, ob es Dateien oder Unterordner unter dem Ordner gibt.
Müsste man aber über FolderObjekt.SubFolders und FolderObjekt.Files rausbekommen.
Bitte warten ..
Mitglied: bastla
22.04.2009, aktualisiert 18.10.2012
Hallo Marcel1981!

Das Script erinnert ein wenig an diesen Beitrag - dort gibt es dann auch noch die Zeile
01.
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete
zum Aurfäumen nach dem (rekursiven) Aufruf von "DeleteInFolder()" - sollte eigentlich auch hier passen ...

Grüße
bastla

P.S.: Wäre das Script mit Code-Formatierung gepostet, hätte ich auch gerne eine Zeilennummer für die Position zum Einfügen dieser Zeile vorgeschlagen (ist aber vermutlich auch ohne zu schaffen ) ...
Bitte warten ..
Mitglied: Marcel1981
23.04.2009 um 08:57 Uhr
Hallo zusammen!
Ich nehme an, da unten ist der Aufruf und die Syntax richtig, er tut aber einfach nicht.
Ausserdem meine ich, dass dort ein end if fehlt, nehme ich es rein meckert er aber "Anweisung erwartet"

01.
'***************************************************************** 
02.
03.
' Löscht alle Dateien, die seit einem bestimmten Datum 
04.
' nicht mehr geändert wurden (in diesem Bsp. ein Tag bzw. 24h) 
05.
06.
'***************************************************************** 
07.
08.
'***************************************************************** 
09.
dim fso 
10.
dim Verzeichnis(1) 
11.
Verzeichnis(0) = "D:\Temp\*" 
12.
Verzeichnis(1) = "D:\Temp1\*" 
13.
 
14.
Aufheben    = 1 'Anzahl Tage 
15.
 
16.
'***************************************************************** 
17.
 
18.
Set fso = CreateObject("Scripting.FileSystemObject") 
19.
Set WSHShell = WScript.CreateObject("WScript.Shell") 
20.
On Error Resume Next                                               
21.
 
22.
for n=0 to 2 
23.
	Set ordner = fso.GetFolder(Verzeichnis(n)) 
24.
	jetzt = now() 
25.
	DeleteInFolder(ordner) 
26.
next 
27.
 
28.
Sub DeleteInFolder(ordner) 
29.
	Set dateien = ordner.Files 
30.
	' Alle Dateien in diesem Ordner abklappern 
31.
	For Each datei In dateien	   
32.
          If datei.DateLastModified < (jetzt) Then 
33.
	    on error resume next 
34.
	     datei.delete	 
35.
	  End If 
36.
	Next 
37.
	Set untere = ordner.SubFolders 
38.
	'Unterordner abklappern, DeleteInFolder rekursiv aufrufen 
39.
	For Each unter In untere 
40.
	  If Unter.DateCreated < (jetzt) Then  
41.
	    DeleteInFolder(Unter) 	 
42.
	    If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete 
43.
	  End If 
44.
	Next 
45.
End Sub 
46.
'*****************************************************************
Bitte warten ..
Mitglied: AndreasHoster
23.04.2009 um 09:31 Uhr
Ich habe das Skript ausprobiert, es funktioniert bei mir.
Die Frage ist, was genau tut nicht.
Löscht er Dateien nicht, Ordner nicht, beides nicht, alle nicht, nur bestimmte nicht ...

Zum End If wenn man den EINZIGEN Befehl im Then Block direkt dahinter schreibt, dann braucht man kein End if.
Und durch das On Error Resume Next bekommst Du auch gar nicht mit, wenn ein Fehler auftritt, z.B. Zugriff verweigert.
Bitte warten ..
Mitglied: Marcel1981
23.04.2009 um 09:38 Uhr
Die Dateien sind raus aber die leeren Ordner bleiben bestehen
Bitte warten ..
Mitglied: AndreasHoster
23.04.2009 um 10:56 Uhr
Nein, bei mir hat er auch die Unterordner unterhalb der angegebenen Order gelöscht. Die angegebenen Ordner natürlich nicht. Ist auch nicht so programmiert
Bitte warten ..
Mitglied: Marcel1981
23.04.2009 um 14:16 Uhr
Ich habe mich falsch ausgedrückt:
Ordner Temp und Temp1 bleiben bestehen, ist ja so gewollt und wie du sagst auch so programmiert, aber wenn sich in diesen Ordnern nun (leere) Unterordner befinden, bleiben die auch nach ausführen des Scriptes bestehen. Das isses ja was mich so irre macht
Bitte warten ..
Mitglied: AndreasHoster
23.04.2009 um 14:43 Uhr
Wie gesagt, an der Logik des Skriptes liegts nicht, da es bei mir tut.
Nimm mal die On Error Resume Next Anweisungen raus, dann müsste es Fehlermeldungen geben, wenn er den Delete nicht ausführen kann.
Bitte warten ..
Mitglied: bastla
23.04.2009 um 15:54 Uhr
Hallo Marcel1981!

Eigentlich bin ich überrascht, dass überhaupt etwas gelöscht wird - der Stern am Ende der Pfadangaben in den Zeilen 11 und 12 gehört dort nicht hin und sorgt bei mir für die Fehlermeldung "Der Pfad wurde nicht gefunden." (was Du nur sehen wirst, wenn Du, wie AndreasHoster schon empfohlen hat, "On Error Resume Next" auskommentierst - in der Testphase eigentlich ohnehin Pflicht).

Außerdem gibt es kein Verzeichnis(2), was aufgrund der Schleife in Zeile 22 den nächsten Fehler produziert - besser wäre hier die Schreibweise
For n = 0 to UBound(Verzeichnis)
Ansonsten macht das Script auch bei mir, was es soll ...

Grüße
bastla
Bitte warten ..
Mitglied: Marcel1981
23.04.2009 um 16:32 Uhr
Hallo nochmal,

die Sternchen sind überbleibsel vom testen, genau wie die 2 bei n, im Grunde ist es eh nur ein VZ was "gesäubert werden soll.
Danke für eurer aller Mühe! So läuft es jetzt!

01.
'***************************************************************** 
02.
03.
' Löscht alle Dateien, die seit einem bestimmten Datum 
04.
' nicht mehr geändert wurden (in diesem Bsp. ein Tag bzw. 24h) 
05.
06.
'***************************************************************** 
07.
08.
'***************************************************************** 
09.
dim fso 
10.
dim Verzeichnis(1) 
11.
Verzeichnis(0) = "D:\Temp\" 
12.
Verzeichnis(1) = "D:\Temp1\" 
13.
 
14.
Aufheben    = 1 'Anzahl Tage 
15.
 
16.
'***************************************************************16 
17.
 
18.
Set fso = CreateObject("Scripting.FileSystemObject") 
19.
Set WSHShell = WScript.CreateObject("WScript.Shell") 
20.
On Error Resume Next                                               
21.
 
22.
for n=0 to 1 
23.
	Set ordner = fso.GetFolder(Verzeichnis(n)) 
24.
	jetzt = now() 
25.
	DeleteInFolder(ordner) 
26.
next 
27.
 
28.
Sub DeleteInFolder(ordner) 
29.
	Set dateien = ordner.Files 
30.
	' Alle Dateien in diesem Ordner abklappern 
31.
	For Each datei In dateien	   
32.
          If datei.DateLastModified < (jetzt-aufheben) Then 
33.
	    'on error resume next 
34.
	     datei.delete	 
35.
	  End If 
36.
	Next 
37.
	Set untere = ordner.SubFolders 
38.
	'Unterordner abklappern, DeleteInFolder rekursiv aufrufen 
39.
	For Each unter In untere 
40.
	  If Unter.DateCreated < (jetzt-aufheben) Then  
41.
	    DeleteInFolder(Unter) 	 
42.
	    If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete 
43.
	  End If 
44.
	Next 
45.
End Sub 
46.
'*****************************************************************
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Poweshell Script soll String ersetzen und die leere Zeile löschen (4)

Frage von Mars123 zum Thema Batch & Shell ...

VB for Applications
gelöst VB Script rekursiv statt nur ein Ordner (4)

Frage von Saschaaaaa zum Thema VB for Applications ...

Outlook & Mail
gelöst Email Anhänge speichern VB Script aber nur bestimmte Dateitypen (Outlook) (4)

Frage von LindeUnimog zum Thema Outlook & Mail ...

Batch & Shell
gelöst Powershell - Ordner löschen mit Ausnahme (10)

Frage von Bugger zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Microsoft
Ordner mit LW-Buchstaben versehen und benennen (19)

Frage von Xaero1982 zum Thema Microsoft ...

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

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...