retrodude
Goto Top

Inhalt von Unterordnern löschen VBScript Prozedur

Hallo Zusammen

Ich habe folgenden Code um den Inhalt von Verzeichnissen zu löschen. Wie muss ich den Code erweitern, damit ich in dem Pfad den Inhalt sämtlicher Unterordner löschen kann? Die Unterordner also bestehen bleiben?
z.B.:
D:\Folder\1\"zu löschender Inhalt"
D:\Folder\2\"zu löschender Inhalt"
..
etc.

Gruss und Dank im Voraus!
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")  

strPath = "D:\Folder"  

Delete strPath

Sub Delete(StrFolder)
On Error Resume Next
Dim Folder
Set Folder = fso.GetFolder(StrFolder)

For Each SubFolder in Folder.SubFolders
Delete SubFolder
If Folder.Attributes And 1 Then
Folder.Attributes = Folder.Attributes - 1
End If
SubFolder.Delete
Next

For Each File In Folder.Files
If File.Attributes And 1 Then
File.Attributes = File.Attributes - 1
End If
File.Delete
Next
End Sub

Content-Key: 173509

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

Printed on: April 18, 2024 at 10:04 o'clock

Member: RetroDude
RetroDude Sep 22, 2011 at 12:52:13 (UTC)
Goto Top
Ich habe mir bereits etwas Gedanken gemacht und sehe folgenden Lösungsweg:

1. Die Namen sämtlicher Unterverzeichnisse einlesen und diese in einem Array ablegen.
2. Den Array durchzählen und die Anzahl Iterationen inkl. Array dem Sub übergeben.

Kann mir bei der Umsetzung meines Plans jemand unter die Arme greifen? Oder ist dieser Ansatz nicht tauglich?

Thanx!
Member: bastla
bastla Sep 22, 2011 at 13:15:53 (UTC)
Goto Top
Hallo RetroDude!

Du hast doch bereits Rekursion in Deinem (leider noch nicht als Code ) Ansatz - dann sollte doch eigentlich etwas in der Art reichen:
Set fso = CreateObject("Scripting.FileSystemObject")  

strPath = "D:\Folder"  

Delete strPath

Sub Delete(StrFolder)
On Error Resume Next
Set Folder = fso.GetFolder(StrFolder)
For Each SubFolder in Folder.SubFolders
    fso.DeleteFile SubFolder.Path & "\*.*", True  
    Delete SubFolder
Next
End Sub
Eine Anmerkung zur Variablendeklaration in VBS: Wenn Du schon "Dim" verwendest, dann aber auch konsequent für alle vorkommenden Variablen und zusammen mit "Option Explicit" - ansonsten kannst Du sie auch gleich einsparen ...

Grüße
bastla
Member: RetroDude
RetroDude Sep 22, 2011 at 13:36:52 (UTC)
Goto Top
Hallo Bastla

Danke für den Hinweis wegen der Formatierung. Habe es ausprobiert. So löscht er zwar die Files auf erster Ebene. Die Unterordner der Unterordner lässt er aber stehen. Dementsprechend auch deren Inhalt. Was muss ich ändern, daimt er sämtlichen Inhalt der Unterordner des entsprechenden Ordners löscht?

Danke und Gruss
Member: bastla
bastla Sep 22, 2011 at 13:49:46 (UTC)
Goto Top
Hallo RetroDude!

Das hatte ich anders verstanden ...

Wenn Du die erste Unterordner-Ebene erhalten, aber alle Inhalte entfernen willst, dann einfach so:
Set fso = CreateObject("Scripting.FileSystemObject")  

strPath = "D:\Folder"  

Set Folder = fso.GetFolder(strPath)
For Each SubFolder in Folder.SubFolders
    fso.DeleteFile SubFolder.Path & "\*.*", True  
    fso.DeleteFolder SubFolder.Path & "\*.*", True  
Next
Grüße
bastla
Member: RetroDude
RetroDude Sep 22, 2011 at 14:02:20 (UTC)
Goto Top
Danke Bastla

Funktioniert bestens. Ich hätte noch ne kleine Frage. Was müsste ich hizufügen, damit im Verzeichnis D:\Folder, in dem ja nur die Ordner bereinigt werden, zusätzlich sämtliche Dateien gelöscht würden?

Gruss und Danke nochmals!
Member: bastla
bastla Sep 22, 2011 at 14:31:24 (UTC)
Goto Top
Hallo RetroDude!

Wenn Du die Zeile 7 betrachtest, und unter Berücksichtigung der Tatsache, dass Du den Pfad gar nicht ermitteln musst, weil er bereits in "strPath" steht, könntest Du das vielleicht auch selbst schaffen ...

Grüße
bastla
Member: RetroDude
RetroDude Sep 22, 2011 at 14:34:54 (UTC)
Goto Top
Hast recht.

fso.DeleteFile strPath & "\*.*", True

gell?

Gruss face-wink
Member: ovu-p86
ovu-p86 Sep 23, 2011 at 01:15:46 (UTC)
Goto Top
Hallo RetroDude,

hier nochmal eine Lösung mit einem "cmd".
cd /d D:\Folder && del /a /s /f /q *.*
erfüllt den gleichen Zweck.

Jetzt bekomme ich bestimmt Haue weil nach einem VB-Script gefragt wurde. Aber das ist ja eine Alternative.


Gruß
Uwe
Member: RetroDude
RetroDude Sep 23, 2011 at 07:11:13 (UTC)
Goto Top
Hallo Uwe

Danke für den Input. Ich bin stets offen für konstruktive Vorschläge. Deiner gehört zu diesen. Lass Dich nicht von frustrierten Mitgliedern von diesem Pfad abbringen. Solche Beiträge sind eine Bereicherung für einen Thread. Viele Wege führen ja bekanntlich nach Rom.

Gruss und schönes Wochenende!

Retrodude
Member: bastla
bastla Sep 23, 2011 at 12:50:58 (UTC)
Goto Top
@ovu-p86
Jetzt bekomme ich bestimmt Haue weil nach einem VB-Script gefragt wurde.
Die Haue gibt's dafür, dass Du
Die Unterordner der Unterordner lässt er aber stehen.
ignoriert hast ... face-wink
@RetroDude
Wenn CMD tatsächlich eine Option ist, dann:
@echo off & setlocal
set "Pfad=D:\Folder"  

del /a /f /q "%Pfad%\*.*"  
for /d %%i in ("%Pfad%\*.*") do (  
    for /d %%u in ("%%~i\*.*") do rd /s /q "%%u"  
    del /a /f /q "%%i\*.*"  
)
Grüße
bastla
Member: ovu-p86
ovu-p86 Sep 23, 2011 at 21:29:33 (UTC)
Goto Top
Hallo Bastla,

das habe ich in der Tat ignoriert. Hatte das so mißverstanden, daß kurz gesagt: alle Dateien gelöscht, aber die komplette Ordnerstruktur erhalten bleiben soll. Und nur das mein cmd.

Das mit "der Haue" hab ich nur geschrieben, weil meiner Ansicht nach, das Klima im Forum in letzter Zeit rauer geworden war.

Ansonsten nochmal meine Hochachtung für dich. Hab viel von dir, deinen Beiträgen lernen können. Du hast mir auch schon häufiger effektiv direkt geholfen. Und das auch mit guten, nachvollziehbaren Erklärungen. - Danke -

In diesem Sinne

Gruß
Uwe
Member: bastla
bastla Sep 24, 2011 at 11:12:52 (UTC)
Goto Top
Hallo ovu-p86!
Hab viel von dir, deinen Beiträgen lernen können.
Danke face-smile - aber das meiste davon habe ich selbst erst hier gelernt / verbessert ...

Grüße
bastla