Ordnerinhalt löschen mit VBS
Hallo zusammen,
ich möchte bei der Abmeldung ein VB-Script starten, dass alle Dateien in C:\temp löscht.
Hab auch ein solches Script schon geschrieben aber in diesem Script lösche ich einfach den ganzen Ordner und erstelle ihn neu. Das funktioniert eigentlich recht gut, aber das Problem is wenn dateien schreibgeschützt sind oder keine Berechtigungen auf eine enthaltene datei besteht dann is natürlich alles fürn hintern.
Deswegen hab ich mir gedacht ich geh alle dateien, ordner und unterordner durch und schau mal ob die schreibgeschützt sind und ob ich die Berechtigungen hab, und wenn dies der Fall is, das ich die Berechtigungen irgendwie übernimm oder das Attribut schreibgeschützt aufhebe. Dazu müsst ich aber wissen wie ich das mach!
Falls einem von euch was einfällt: Please tell me!
Danke chapster
ich möchte bei der Abmeldung ein VB-Script starten, dass alle Dateien in C:\temp löscht.
Hab auch ein solches Script schon geschrieben aber in diesem Script lösche ich einfach den ganzen Ordner und erstelle ihn neu. Das funktioniert eigentlich recht gut, aber das Problem is wenn dateien schreibgeschützt sind oder keine Berechtigungen auf eine enthaltene datei besteht dann is natürlich alles fürn hintern.
Deswegen hab ich mir gedacht ich geh alle dateien, ordner und unterordner durch und schau mal ob die schreibgeschützt sind und ob ich die Berechtigungen hab, und wenn dies der Fall is, das ich die Berechtigungen irgendwie übernimm oder das Attribut schreibgeschützt aufhebe. Dazu müsst ich aber wissen wie ich das mach!
Falls einem von euch was einfällt: Please tell me!
Danke chapster
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 50157
Url: https://administrator.de/contentid/50157
Ausgedruckt am: 23.11.2024 um 10:11 Uhr
10 Kommentare
Neuester Kommentar
Moin chapster,
grobe Skizze:
So in etwa... wobei es aufzurufen wäre mit...
Für einen Aufruf vom CMD-Prompt spräche, dass Du das in der Skizze fest verdrahtete "C:\Temp"
besser als Parameter (Wscript.Arguments(0) ) übergeben könntest.
Ähnliche Beispiele findest Du aber auch schon hier im Forum...
...und eine Suche in einer der FileSystemObject-Syntax-Referenzen erklärt Dir die paar Befehle besser, als ich mir je anmaßen würde.
Deshalb war ich etwas sparsam mit Kommentaren.
...und weil ich stinkefaul bin *zugeb*
HTH
Biber
grobe Skizze:
' ---------deltempFiles.vbs
Dim File, fso, folder
'Dim tempDir
'TempDir = "C:\Temp\"
Set fso = CreateObject("Scripting.FileSystemObject")
FackelAb "C:\temp" ' oder TempDir oder Wscript.Arguments(0) ...
Wscript.Quit
'------------schon zu Ende, der Schnipsel...*g
Sub FackelAb( Strfolder)
Dim Folder, SubFolder
wscript.echo "----" & StrFolder ' hier aus-kommentieren
Set folder = fso.GetFolder(StrFolder)
For Each SubFolder in folder.SubFolders
FackelAb SubFolder
Next
For Each File in Folder.Files
'File.Delete File.Name ' Hier ent-kommentieren
WScript.echo "File.Delete " & File.Name ' hier aus-kommentieren
Next
End Sub
So in etwa... wobei es aufzurufen wäre mit...
cscript //nologo deltempFiles.vbs [vom CMD-Prompt]
oder halt per Doppelklick starten.Für einen Aufruf vom CMD-Prompt spräche, dass Du das in der Skizze fest verdrahtete "C:\Temp"
besser als Parameter (Wscript.Arguments(0) ) übergeben könntest.
Ähnliche Beispiele findest Du aber auch schon hier im Forum...
...und eine Suche in einer der FileSystemObject-Syntax-Referenzen erklärt Dir die paar Befehle besser, als ich mir je anmaßen würde.
Deshalb war ich etwas sparsam mit Kommentaren.
...und weil ich stinkefaul bin *zugeb*
HTH
Biber
Hallo chapster!
Wenn es auch Batch sein dürfte, hätte ich folgenden Vorschlag:
Lege zunächst den Ordner C:\Temp neu an und setze die entsprechenden Sicherheitseinstellungen, die für neue Ordner/Dateien vererbt werden. Natürlich sollte dann dieser Ordner erhalten bleiben.
Daher weiter per Batch:
Ev kannst Du die Durchführung noch beschleunigen, wenn Du das Löschen der Dateien und Unterverzeichnisse einmal vorweg durchführst und nur für die verbliebenen schreibgeschützten (etc) Dateien den attrib-Befehl durchlaufen lässt - danach natürlich nochmals die beiden Löschbefehle ...
Grüße
bastla
Wenn es auch Batch sein dürfte, hätte ich folgenden Vorschlag:
Lege zunächst den Ordner C:\Temp neu an und setze die entsprechenden Sicherheitseinstellungen, die für neue Ordner/Dateien vererbt werden. Natürlich sollte dann dieser Ordner erhalten bleiben.
Daher weiter per Batch:
::Schreibschutz-, versteckt-, System-Attribut rücksetzen für alle Dateien
attrib C:\Temp\*.* /s /d -r -h -s
::alle Dateien ohne Rückfrage aus dem Ordner C:\Temp selbst löschen
del /q C:\Temp\*.*
::alle Unterverzeichnisse ohne Rückfrage löschen
for /f "delims=" %%i in ('dir C:\Temp /b /ad') do rd /s /q "%%i"
Grüße
bastla
@Biber
Das wäre übrigens ein klassischer Fall für ein "On Error Resume Next" (wegen der ev Rechteprobleme ...)
Grüße
bastla
Das wäre übrigens ein klassischer Fall für ein "On Error Resume Next" (wegen der ev Rechteprobleme ...)
Grüße
bastla
@bastla
<*nach Worten ring*>...
egal - ich nutze es höchst ungern.
Aber in diesem Fall...also ein mit Sicherheit grenzender Wahrscheinlichkeit auftretender "Fehler",
der mir/chapster wirklich egal ist... da wäre es okay.
Allerdings würde ich dann im Batch auch die Fehlermeldungen mit "2>nul" an dieselbe Stelle umleiten
Grüße
Biber
Das wäre übrigens ein klassischer Fall für ein "On Error Resume Next"
Stimmt, aber dieses "On Error goto SchwammDrüber" fand ich schon bei meinen ersten zarten Berührungsversuchen mit VBScript so...<*nach Worten ring*>...
egal - ich nutze es höchst ungern.
Aber in diesem Fall...also ein mit Sicherheit grenzender Wahrscheinlichkeit auftretender "Fehler",
der mir/chapster wirklich egal ist... da wäre es okay.
Allerdings würde ich dann im Batch auch die Fehlermeldungen mit "2>nul" an dieselbe Stelle umleiten
Grüße
Biber
@Biber
Zumindest für die angedachte Variante des "Vorweg-Abräumens" hast Du aber natürlich wieder einmal Recht.
Wenn ich noch ein wenig verfeinern dürfte:
Grüße
bastla
[Edit] SETZEN: TorchTheBloody umgesetzt [/Edit]
... auch die Fehlermeldungen mit "2>nul" an dieselbe Stelle umleiten
... wobei sie aber in diesem Fall vielleicht doch (zur Lokalisierung der Überbleibsel) nützlich sein könnten ...Zumindest für die angedachte Variante des "Vorweg-Abräumens" hast Du aber natürlich wieder einmal Recht.
Wenn ich noch ein wenig verfeinern dürfte:
' ---------deltempFiles.vbs
Dim File, fso, folder
'Dim tempDir
'TempDir = "C:\Temp\"
Set fso = CreateObject("Scripting.FileSystemObject")
<b>TorchTheBloody</b> "C:\temp" ' oder TempDir oder Wscript.Arguments(0) ...
Wscript.Quit
'------------schon zu Ende, der Schnipsel...*g
Sub <b>TorchTheBloody</b>( Strfolder)
<b>On Error Resume Next</b>
Dim Folder, SubFolder
wscript.echo "----" & StrFolder ' hier aus-kommentieren
Set folder = fso.GetFolder(StrFolder)
For Each SubFolder in folder.SubFolders
<b>TorchTheBloody</b> SubFolder
'Schreibschutz entfernen (obwohl für Folder anscheinend nicht unbedingt erforderlich)
<b>'If Folder.Attributes And 1 Then Folder.Attributes = Folder.Attributes - 1</b> 'hier ent-kommentieren
<b>'SubFolder.Delete</b> 'hier ent-kommentieren
Next
For Each File in Folder.Files
WScript.echo "File.Delete " & File.Name ' hier aus-kommentieren
<b>'If File.Attributes And 1 Then File.Attributes = File.Attributes - 1</b> 'Schreibschutz entfernen; hier ent-kommentieren
'File.Delete ' Hier ent-kommentieren
Next
End Sub
Grüße
bastla
[Edit] SETZEN: TorchTheBloody umgesetzt [/Edit]
Jepp, bastla,
so macht das schon einen etwas seriöseren Eindruck...
Ich bin auch bereit (als kleines Zugeständnis an das in Englisch wirklich besser lesbarere Progrämmchen) auch die "Sub FackelAb" umzubenennen.
Das müsste auf ausländisch "to torch something" heißen...
Also sollten wir an den drei Stellen
STREICHEN: FackelAb "C:\temp" / Sub FackelAb (strFolder) / FackelAb SubFolder
SETZEN: TorchTheBloody "C:\temp" / Sub TorchTheBloody (strFolder) / TorchTheBloody SubFolder
...dann macht es einen richtig "runden" Eindruck...
Grüße
Biber
[Edit] @chapster
Dazu hab ich schon mal hier in einem ähnlichen Thread "Alle Dateien im Temp-Verzeichnis löschen" oder so gaaaaaaaaaaaaaanz viel geschrieben.
Alle geht nicht, weil
- immer ein Dutzend in Gebrauch/gesperrt ist
- immer noch und immer wieder ein paarNasen Spezialisten in den Temp-Ordner dauerhafte Konfig-Infos und Serien-Nummern und Install-Pfade hinterlegen, die natürlich dann schreibgeschützt werden...
Die unter Fall a) erwischt Du beim nächsten Mal... morgen oder übermorgen...was solls.
Die unter Fall b) solltest Du nicht um jeden Preis wegknallen.
[/Edit]
P.S. Thx, bastla
so macht das schon einen etwas seriöseren Eindruck...
Ich bin auch bereit (als kleines Zugeständnis an das in Englisch wirklich besser lesbarere Progrämmchen) auch die "Sub FackelAb" umzubenennen.
Das müsste auf ausländisch "to torch something" heißen...
Also sollten wir an den drei Stellen
STREICHEN: FackelAb "C:\temp" / Sub FackelAb (strFolder) / FackelAb SubFolder
SETZEN: TorchTheBloody "C:\temp" / Sub TorchTheBloody (strFolder) / TorchTheBloody SubFolder
...dann macht es einen richtig "runden" Eindruck...
Grüße
Biber
[Edit] @chapster
Also nochmal das Problem:
Das Script soll alle Dateien im Ordner C:\temp löschen!
Das geht nie nicht. Punkt.Das Script soll alle Dateien im Ordner C:\temp löschen!
Dazu hab ich schon mal hier in einem ähnlichen Thread "Alle Dateien im Temp-Verzeichnis löschen" oder so gaaaaaaaaaaaaaanz viel geschrieben.
Alle geht nicht, weil
- immer ein Dutzend in Gebrauch/gesperrt ist
- immer noch und immer wieder ein paar
Die unter Fall a) erwischt Du beim nächsten Mal... morgen oder übermorgen...was solls.
Die unter Fall b) solltest Du nicht um jeden Preis wegknallen.
[/Edit]
P.S. Thx, bastla
nur File.Delete wird nicht hin hauen
... wird es doch.Hat diese datei einen Schreibschutz soll dieser Aufgehoben werden und danach die datei gelöscht werden.
... siehe unten.Habe ich keine Berechtigungen die Datei zu löschen sollen die Berechtigungen übernommen werden und die datei danach gelöscht werden ... aber, ich glaub das mit den Berechtigungen übernhemen wird nicht hin hauen.
Vielleicht versuchst Du doch meinen Vorschlag von vorhin (Rechte vorweg setzen und damit vererben lassen; C:\Temp selbst bleibt ja in der aktuellen Version bestehen) - oder Du schlägst Dich zB mit "xcacls" herum.Grüße
bastla