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

Ordnerinhalt löschen mit VBS

Frage Entwicklung Basic

Mitglied: chapster

chapster (Level 1) - Jetzt verbinden

29.01.2007, aktualisiert 23:29 Uhr, 14951 Aufrufe, 10 Kommentare

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
Mitglied: Biber
29.01.2007 um 21:01 Uhr
Moin chapster,

grobe Skizze:
01.
' ---------deltempFiles.vbs 
02.
Dim File, fso, folder 
03.
 
04.
'Dim tempDir 
05.
'TempDir = "C:\Temp\" 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
FackelAb "C:\temp"                ' oder TempDir oder Wscript.Arguments(0) ... 
08.
Wscript.Quit 
09.
'------------schon zu Ende, der Schnipsel...*g 
10.
Sub FackelAb( Strfolder) 
11.
Dim Folder, SubFolder 
12.
wscript.echo "----" & StrFolder  ' hier aus-kommentieren 
13.
Set folder = fso.GetFolder(StrFolder) 
14.
For Each SubFolder in folder.SubFolders 
15.
    FackelAb SubFolder 
16.
Next     
17.
For Each File in Folder.Files 
18.
    'File.Delete File.Name     ' Hier ent-kommentieren 
19.
    WScript.echo "File.Delete " & File.Name   ' hier aus-kommentieren 
20.
Next 
21.
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
Bitte warten ..
Mitglied: bastla
29.01.2007 um 21:10 Uhr
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:
01.
::Schreibschutz-, versteckt-, System-Attribut rücksetzen für alle Dateien 
02.
attrib C:\Temp\*.* /s /d -r -h -s 
03.
::alle Dateien ohne Rückfrage aus dem Ordner C:\Temp selbst löschen 
04.
del /q C:\Temp\*.* 
05.
::alle Unterverzeichnisse ohne Rückfrage löschen 
06.
for /f "delims=" %%i in ('dir C:\Temp /b /ad') do rd /s /q "%%i"
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
Bitte warten ..
Mitglied: bastla
29.01.2007 um 21:14 Uhr
@Biber

Das wäre übrigens ein klassischer Fall für ein " ;On Error Resume Next" (wegen der ev Rechteprobleme ...)

Grüße
bastla
Bitte warten ..
Mitglied: Biber
29.01.2007 um 21:26 Uhr
@bastla
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
Bitte warten ..
Mitglied: bastla
29.01.2007 um 22:37 Uhr
@Biber

... 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:
01.
' ---------deltempFiles.vbs 
02.
Dim File, fso, folder 
03.
 
04.
'Dim tempDir 
05.
'TempDir = "C:\Temp\" 
06.
Set fso = CreateObject("Scripting.FileSystemObject") 
07.
<b>TorchTheBloody</b> "C:\temp"                ' oder TempDir oder Wscript.Arguments(0) ... 
08.
Wscript.Quit 
09.
'------------schon zu Ende, der Schnipsel...*g 
10.
Sub <b>TorchTheBloody</b>( Strfolder) 
11.
<b>On Error Resume Next</b> 
12.
Dim Folder, SubFolder 
13.
wscript.echo "----" & StrFolder  '  hier aus-kommentieren 
14.
Set folder = fso.GetFolder(StrFolder) 
15.
For Each SubFolder in folder.SubFolders 
16.
    <b>TorchTheBloody</b> SubFolder 
17.
    'Schreibschutz entfernen (obwohl für Folder anscheinend nicht unbedingt erforderlich) 
18.
    <b>'If Folder.Attributes And 1 Then Folder.Attributes = Folder.Attributes - 1</b>  'hier ent-kommentieren 
19.
    <b>'SubFolder.Delete</b>   'hier ent-kommentieren 
20.
Next     
21.
For Each File in Folder.Files 
22.
    WScript.echo "File.Delete " & File.Name   ' hier aus-kommentieren 
23.
    <b>'If File.Attributes And 1 Then File.Attributes = File.Attributes - 1</b> 'Schreibschutz entfernen; hier ent-kommentieren 
24.
    'File.Delete     ' Hier ent-kommentieren 
25.
Next 
26.
End Sub
Grüße
bastla

[Edit] SETZEN: TorchTheBloody umgesetzt [/Edit]
Bitte warten ..
Mitglied: Biber
29.01.2007 um 22:49 Uhr
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
Also nochmal das Problem:
Das Script soll alle Dateien im Ordner C:\temp löschen!
Das geht nie nicht. Punkt.
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 Nasen 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
Bitte warten ..
Mitglied: chapster
29.01.2007 um 22:50 Uhr
Vielen, vielen Dank für den Code!

War auch fast richtig so, nur File.Delete wird nicht hin hauen, sollte dann wahrscheinlich so ausschauen:
fso.DeleteFile Strfolder & "\" & File.Name

Meins hat eh ziemlich ähnlich ausgeschaut, aber das Problem das weiterhin besteht ist, dass das Script, wenn ich keine Berechtigungen hab oder eine Datei schreibgeschützt ist, eine Fehlermeldung hervor ruft.

Also nochmal das Problem:
Das Script soll alle Dateien im Ordner C:\temp löschen!
Also muss ich jede einzelne Datei lesen, gucken ob diese schreibgeschützt ist oder ob ich berechtigungen darauf habe und dann löschen.
Hat diese datei einen Schreibschutz soll dieser Aufgehoben werden und danach die datei gelöscht werden.
Habe ich keine Berechtigungen die Datei zu löschen sollen die Berechtigungen übernommen werden und die datei danach gelöscht werden.

So ich glaub jetzt hab ichs ziemlich eindeutig beschrieben.
Außerdem such ich eh schon ganze Zeit nach so ner Lösung aber, ich glaub das mit den Berechtigungen übernhemen wird nicht hin hauen.

Falls trotzdem noch wem was einfällt, bitte schreibt mir nochmal.

Danke

!*!*!*!*!*!*!*!
special thanks to Biber for the Script again
Bitte warten ..
Mitglied: bastla
29.01.2007 um 23:04 Uhr
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
Bitte warten ..
Mitglied: chapster
29.01.2007 um 23:15 Uhr
Sorry!

File.Delete geht logischerweise eh, nur das File.Name dahinter hat mich iritiert.

Und der Vorschlag mit den Berechtigungen is sehr gut, das werd ich so machen!

Also nochmal vielen, vielen Dank

euer chapster
Bitte warten ..
Mitglied: chapster
29.01.2007 um 23:29 Uhr
Sodala!

Stimmt alle werd ich eh nie weg kriegen, na egal trotzdem vielen vielen dank an euch beide:

Und für alle die mal da rein schaun sollten und das auch haben wollen aber keine ahnung haben was sie jetzt auskommentieren sollen und was nicht hab ichs nochmal zamgschrieben. So wies is funktionierts und besser wird wahrscheinlich eh nie gehen.


Dim fso

Set fso = CreateObject("Scripting.FileSystemObject")
Delete "C:\temp"
Wscript.Quit

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
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
Microsoftaccount löschen (3)

Frage von Kroni99 zum Thema Microsoft Office ...

VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Exchange Server
Exchange 2010 Akzeptierte Domäne löschen (4)

Frage von Rob1982 zum Thema Exchange Server ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (17)

Frage von liquidbase zum Thema Windows Update ...