Löschen von alten Dateien und Verzeichnissen per VBS mit Ausnahmen....
Hallo Zusammen!
Der Artikel bezieht sich teilweise auf den Thread:
Ich habe folgendes Problem:
Auf einem FileSRV befindet sich ein Transferlaufwerk, auf welchem Dateien zum Transfer
und für eine kurze Ablage zwischen den Abteilungen eingerichtet wurde.
Leider wurde diese Laufwerk nie gepfelgt und mittlerweile beträgt das Volumen mehr als 480GB.
Fremde Software darf leider nicht angwanden werden, womit DelAge nicht mehr in Frage kommt.
Also bleibt mir nur die Variante mit dem VBScript übrig.
Diese sollte einmal im Monat laufen und alle Dateien und Verzeichnisse in der Laufwerkstruktur löschen, die älter als 120 Tage sind.
Dabei soll ein bestimmter Ordner (Chef ) nicht angepackt werden.
Wie baue ich eine Ausnahme in dieses Script mit ein??
Ausserdem hab ich festgestellt, dass das Script nur die Dateien löscht, die leeren Verzeichnisse und Unterverzeichnisse aber beibehält.
Kann ich nicht die For-Schleifen myFiles und myFolder in ein Script packen??
Danke für Eure Hilfe!
Sebastian
[Edit Biber] 18.02.2009 Beitrag auf "Gelöst" gesetzt und verschoben von "Tools & Utilities" nach "Batch & Shell" [Edit]
Der Artikel bezieht sich teilweise auf den Thread:
Ich habe folgendes Problem:
Auf einem FileSRV befindet sich ein Transferlaufwerk, auf welchem Dateien zum Transfer
und für eine kurze Ablage zwischen den Abteilungen eingerichtet wurde.
Leider wurde diese Laufwerk nie gepfelgt und mittlerweile beträgt das Volumen mehr als 480GB.
Fremde Software darf leider nicht angwanden werden, womit DelAge nicht mehr in Frage kommt.
Also bleibt mir nur die Variante mit dem VBScript übrig.
Diese sollte einmal im Monat laufen und alle Dateien und Verzeichnisse in der Laufwerkstruktur löschen, die älter als 120 Tage sind.
Dabei soll ein bestimmter Ordner (Chef ) nicht angepackt werden.
Wie baue ich eine Ausnahme in dieses Script mit ein??
Ausserdem hab ich festgestellt, dass das Script nur die Dateien löscht, die leeren Verzeichnisse und Unterverzeichnisse aber beibehält.
Kann ich nicht die For-Schleifen myFiles und myFolder in ein Script packen??
Danke für Eure Hilfe!
Sebastian
[Edit Biber] 18.02.2009 Beitrag auf "Gelöst" gesetzt und verschoben von "Tools & Utilities" nach "Batch & Shell" [Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 11.11.2010 um 16:06:27 Uhr
Den seit Monaten gelösten Beitrag geschlossen wegen Trittbrettfahrerei.
Content-ID: 34554
Url: https://administrator.de/contentid/34554
Ausgedruckt am: 17.11.2024 um 04:11 Uhr
36 Kommentare
Neuester Kommentar
Moin sansebastian,
willkommen im Forum.
Nicht, dass ich der Frage ausweichen will, aber ich würde (wie auch im damaligen Thread) anregen, nochmal zu (hinter-)fragen, WTF den DelAge32.exe NICHT eingesetzt werden darf/soll.
Tools wie dieses sind nun wirklich nicht gemeint gewesen mit "keine Software auf undserem Server installieren".
Eine Anpassung von Softmeisters VBS-Schnipsel könnte so aussehen:
[Ungetestete Skizze]
Eine batchlösung kann ebenfalls auf Anfrage kurzfristig geliefert werden.
Gruss
Biber
willkommen im Forum.
Nicht, dass ich der Frage ausweichen will, aber ich würde (wie auch im damaligen Thread) anregen, nochmal zu (hinter-)fragen, WTF den DelAge32.exe NICHT eingesetzt werden darf/soll.
Tools wie dieses sind nun wirklich nicht gemeint gewesen mit "keine Software auf undserem Server installieren".
Eine Anpassung von Softmeisters VBS-Schnipsel könnte so aussehen:
' DelOldScrap.vbs <inAndBelowFolder> <AgeInDays>
Set myArguments = WScript.Arguments
If myArguments.Count <> 2 Then
call DisplayInfo
Wscript.Quit (1)
End if
Dim heute, olddate
heute = FormatDateTime(Date, 2)
olddate = DateAdd("d","-" & myArguments(1), heute)
set objFS = CreateObject("Scripting.FilesystemObject")
set myFolder = objFS.GetFolder(myArguments(0))
set mySubfolders = myFolder.Subfolders
for each subfolder in mySubfolders
<b> If Lcase(Subfolder.name) != LCase( "X:\Subfolder\NameVomFolderDerIgnoriertWerden soll") then </b>
If subfolder.DateCreated < olddate then
subfolder.Delete
end if
<b>end if</b>
next
Sub DisplayInfo
MsgBox "Usage: deleteoldfolders.vbs [FolderPath] [Anzahl Tage]", vbExclamation, "Missing Arguments"
End Sub
Eine batchlösung kann ebenfalls auf Anfrage kurzfristig geliefert werden.
Gruss
Biber
Hallo sansebastian!
Grüße
bastla
Löscht dieses Script dann auch anschließend die leeren Verzeichnisse??
for each subfolder in mySubfolders bedeutet doch, das nur Verzeichnisse gesucht werden. Die Files bleiben dabei außen vor....!?
Ganz im Gegentum - sobald ein Ordner alt genug ist, wird er samt Inhalten (Dateien und Unterordner) entsorgt - die nötigen Berechtigungen vorausgesetzt.for each subfolder in mySubfolders bedeutet doch, das nur Verzeichnisse gesucht werden. Die Files bleiben dabei außen vor....!?
Grüße
bastla
Hallo sansebastian!
Hat leider etwas gedauert ...
Versuch mal die folgende Variante:
Gelöscht werden in den Unterordnern des übergebenen Startordners Dateien nach dem Erstellungsdatum (siehe Kommentar im Script für "Datum der letzten Änderung") und leere Ordner, ausgenommen der "Chef"-Ordner und dessen Unterordner.
Aufgerufen wird das Script mit
Der Startpfad muss vorhanden sein, kann aber zB auch "T:\" lauten.
Grüße
bastla
Hat leider etwas gedauert ...
Versuch mal die folgende Variante:
' DelOldScrap.vbs <BelowFolder> <AgeInDays>
Const Chef="ChefDaten" 'Ordnername ohne Pfadangabe
Set myArguments = WScript.Arguments
If myArguments.Count <> 2 Then
Usage
Wscript.Quit (1)
End if
Heute = FormatDateTime(Date, 2)
OldDate = DateAdd("d","-" & myArguments(1), Heute)
Set objFS = CreateObject("Scripting.FilesystemObject")
If objFS.FolderExists(myArguments(0)) Then
DoSubFolders objFS.GetFolder(myArguments(0))
Else
Usage
End If
MsgBox "Fertig."
Sub DoSubFolders (Folder)
For Each SubFolder In Folder.SubFolders
If LCase(SubFolder.Name) <> LCase(Chef) Then
For Each File In SubFolder.Files
If File.DateCreated < OldDate Then 'oder .DateLastModified für "letzte Änderung"
File.Delete
End If
Next
DoSubFolders(SubFolder)
If (SubFolder.SubFolders.Count + SubFolder.Files.Count) = 0 Then
SubFolder.Delete
End If
End If
Next
End Sub
Sub Usage
MsgBox "Usage: " & WScript.ScriptName & " StartPfad TageAnzahl", vbExclamation, "Argumente überprüfen ..."
End Sub
Aufgerufen wird das Script mit
Scriptname.vbs Startpfad Tageanzahl
Grüße
bastla
Hallo sansebastian!
Grüße
bastla
??? Doppelpost ???
Obwohl ich mir sehr vorgenommen hatte, dass es mir nicht passieren sollte, einen Beitrag doppelt oder mehrfach zu posten, hatte ich es leider doch geschafft (Reaktionszeit des Forums war zu dieser Zeit bei etwa 2 Minuten) und daher den zweiten, gleichlautenden Beitrag entfernt und durch obigen Hinweis ersetzt.Grüße
bastla
Hallo,
wollt mich nur mal bedanken. Hab mit der Hilfe dieses Threads - also Eurer - ein Script geschrieben, dass beim Start der PCs die lokalen Kopien der Profile löscht, die hätten eigentlich beim Herunterfahren gelöscht werden sollen.
Const Bleibt1=""
Const Bleibt2="Administrator"
Const Bleibt3="All Users"
Const Bleibt4="Default User"
Const Bleibt5="LocalService"
Const Bleibt6="NetworkService"
set objFS = CreateObject("Scripting.FilesystemObject")
set myFolder = objFS.GetFolder("C:\Dokumente und Einstellungen")
set mySubfolders = myFolder.Subfolders
for each subfolder in mySubfolders
If Lcase(Subfolder.name) <> LCase(Bleibt1) and Lcase(Subfolder.name) <> LCase(Bleibt2) and Lcase(Subfolder.name) <> LCase(Bleibt3) and Lcase(Subfolder.name) <> LCase(Bleibt4) and Lcase(Subfolder.name) <> LCase(Bleibt5) and Lcase(Subfolder.name) <> LCase(Bleibt6) then
subfolder.Delete
end if
next
wollt mich nur mal bedanken. Hab mit der Hilfe dieses Threads - also Eurer - ein Script geschrieben, dass beim Start der PCs die lokalen Kopien der Profile löscht, die hätten eigentlich beim Herunterfahren gelöscht werden sollen.
Const Bleibt1=""
Const Bleibt2="Administrator"
Const Bleibt3="All Users"
Const Bleibt4="Default User"
Const Bleibt5="LocalService"
Const Bleibt6="NetworkService"
set objFS = CreateObject("Scripting.FilesystemObject")
set myFolder = objFS.GetFolder("C:\Dokumente und Einstellungen")
set mySubfolders = myFolder.Subfolders
for each subfolder in mySubfolders
If Lcase(Subfolder.name) <> LCase(Bleibt1) and Lcase(Subfolder.name) <> LCase(Bleibt2) and Lcase(Subfolder.name) <> LCase(Bleibt3) and Lcase(Subfolder.name) <> LCase(Bleibt4) and Lcase(Subfolder.name) <> LCase(Bleibt5) and Lcase(Subfolder.name) <> LCase(Bleibt6) then
subfolder.Delete
end if
next
Hallo TSglueck!
Danke fürs Bedanken ...
Etwas leichter erweiterbar (wenn's denn nötig sein sollte) durch Hinzufügen einer weiteren "Case"-Zeile wäre folgende Variante:
Grüße
bastla
Danke fürs Bedanken ...
Etwas leichter erweiterbar (wenn's denn nötig sein sollte) durch Hinzufügen einer weiteren "Case"-Zeile wäre folgende Variante:
Set objFS = CreateObject("Scripting.FilesystemObject")
Set mySubfolders = objFS.GetFolder("C:\Dokumente und Einstellungen").Subfolders
For Each Subfolder In mySubfolders
Select Case LCase(Subfolder.Name)
Case LCase("Administrator")
Case LCase("All Users")
Case LCase("Default User")
Case LCase("LocalService")
Case LCase("NetworkService")
Case Else
Subfolder.Delete
End Select
Next
bastla
Hallöchen, ich bin neu hier.
Ich denke ihr werdet gleich lachen,
aber ich versteh so rein garnichts vom Programmieren.
D.H. ich hab hier was kopiert aus einem der Foren hier,
aber irgendwie geht das nicht.
Ich suche eig. ein Vbs Script, das Dateien und Ordner in einem Order auf dem Desktop löscht, welche älter als 3 Tage alt sind und Ausnahmen beinhaltet (nichtlöschen.txt z.B.). -> Was ich gezielt hier nicht finde.
Was ich kopiert (schon angepasst) hab ist folgendes:
In meiner Ausschluss.txt steht die Datei/Ordnerbezeichnung die nicht gelöscht werden sollen:
nichtloeschen
In meiner Ordnerliste.txt steht der explorer Link zu dem Test-Ordner aufem Desktop:
C:\Dokumente und Einstellungen\pweberling\Desktop\Test
Ich wollte das erstmal bei mir testen, bevor ich das auf den Firmenserver anwenden lasse.
Bitte um Hilfe. :/
[Edit Biber] Codeformatierung[/Edit]
Ich denke ihr werdet gleich lachen,
aber ich versteh so rein garnichts vom Programmieren.
D.H. ich hab hier was kopiert aus einem der Foren hier,
aber irgendwie geht das nicht.
Ich suche eig. ein Vbs Script, das Dateien und Ordner in einem Order auf dem Desktop löscht, welche älter als 3 Tage alt sind und Ausnahmen beinhaltet (nichtlöschen.txt z.B.). -> Was ich gezielt hier nicht finde.
Was ich kopiert (schon angepasst) hab ist folgendes:
Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
On Error Resume Next
' * hier eigenen Bedürfnissen anpassen *
strOrdnerliste = "C:\Dokumente und Einstellungen\pweberling\Desktop\Ordnerliste.txt"
strAusschlussliste = "C:\Dokumente und Einstellungen\pweberling\Desktop\Ausschluss.txt"
Aufheben = 0 'Anzahl der Tage
' * Ende der Anpassungen *
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste, 1)
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
objOrdnerliste.Close
Set objAusschlussliste = fso.OpenTextFile(strAusschlussliste, 1)
Exclude = Split(objAusschlussliste.ReadAll, vbCrLF)
objAusschlussliste.Close
Heute = Date()
For n = 0 To UBound(Verzeichnis)
Set Ordner = fso.GetFolder(Verzeichnis(n))
DeleteInFolder(Ordner)
Next
Sub DeleteInFolder(Ordner)
Set Dateien = Ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each Datei In Dateien
If Datei.DateLastModified < (Heute - Aufheben) Then
ToKeep = False
For Each Ex In Exclude
If LCase(Right(Datei.Name, Len(Ex))) = LCase(Ex) Then
ToKeep = True
Exit For
End If
Next
If Not ToKeep Then
On Error Resume Next
Datei.Delete
If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit
On Error Goto 0
End If
End If
Next
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each Unter In Ordner.SubFolders
DeleteInFolder(Unter)
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete
Next
End Sub
In meiner Ausschluss.txt steht die Datei/Ordnerbezeichnung die nicht gelöscht werden sollen:
nichtloeschen
In meiner Ordnerliste.txt steht der explorer Link zu dem Test-Ordner aufem Desktop:
C:\Dokumente und Einstellungen\pweberling\Desktop\Test
Ich wollte das erstmal bei mir testen, bevor ich das auf den Firmenserver anwenden lasse.
Bitte um Hilfe. :/
[Edit Biber] Codeformatierung[/Edit]
Hallo Alkenix und willkommen im Forum!
Bis auf die Überprüfung der Ausschlüsse (sollte in der unten dargestellten Variante etwas performanter sein) würde ich bestenfalls noch Kleinigkeiten anpassen:
Das effektive Löschen habe ich hier durch Ausgabe des Datei-/Ordnerpfades ersetzt, daher bitte mit "
Leere Ordner werden in dieser Simulation nur als zu löschen angezeigt, wenn sie bereits leer waren (da ja noch keine Dateien gelöscht werden). Für das Dateialter habe ich lt Beschreibung oben 3 Tage angesetzt.
Grüße
bastla
Bitte um Hilfe. :/
Wo ist Dein konkretes Problem?Bis auf die Überprüfung der Ausschlüsse (sollte in der unten dargestellten Variante etwas performanter sein) würde ich bestenfalls noch Kleinigkeiten anpassen:
Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
'On Error Resume Next '## während der Testphase kontraproduktiv ##
' * hier eigenen Bedürfnissen anpassen *
strOrdnerliste = "C:\Dokumente und Einstellungen\pweberling\Desktop\Ordnerliste.txt"
strAusschlussliste = "C:\Dokumente und Einstellungen\pweberling\Desktop\Ausschluss.txt"
Aufheben = 3 'Anzahl der Tage
' * Ende der Anpassungen *
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste)
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
objOrdnerliste.Close
Set objAusschlussliste = fso.OpenTextFile(strAusschlussliste)
Exclude = "#" & Replace(objAusschlussliste.ReadAll, vbCrLF, "#") & "#"
objAusschlussliste.Close
Heute = Date()
For n = 0 To UBound(Verzeichnis)
Set Ordner = fso.GetFolder(Verzeichnis(n))
DeleteInFolder(Ordner)
Next
Sub DeleteInFolder(Ordner)
Set Dateien = Ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each Datei In Dateien
If Datei.DateLastModified < (Heute - Aufheben) Then
'nur Dateien, deren Name nicht wie ein Eintrag der Ausschlussliste endet
'(für exakte Übereinstimmung - außer Groß-/Kleinschreibung - wäre
'"#" & Datei.Name & "#"
'zu verwenden)
If InStr(1, Exclude, Datei.Name & "#", vbTextCompare) = 0 Then
On Error Resume Next
WScript.Echo "-" &Datei.DateLastModified&" "&Datei.Path 'Datei.Delete
If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit
On Error Goto 0
End If
End If
Next
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each Unter In Ordner.SubFolders
'nur Ordner, deren Name nicht wie ein Eintrag der Ausschlussliste endet
If InStr(1, Exclude, Unter.Name & "#", vbTextCompare) = 0 Then
DeleteInFolder(Unter)
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then WScript.Echo "--"&Unter.Path 'Unter.Delete
End If
Next
End Sub
cscript Script.vbs
" aus einer CMD-Shell heraus testen!Leere Ordner werden in dieser Simulation nur als zu löschen angezeigt, wenn sie bereits leer waren (da ja noch keine Dateien gelöscht werden). Für das Dateialter habe ich lt Beschreibung oben 3 Tage angesetzt.
Grüße
bastla
Joa, danke.. Oo
Mein Problem liegt, lag daran, das es für mich Fachchinesisch ist.
Ich hab das zwar kopiert, und nen wenig gerallt, aber leider hab ich z.B. schon wieder keine Ahnung davon,
was du mit dieses Satz meinst @bastla "Das effektive Löschen habe ich hier durch Ausgabe des Datei-/Ordnerpfades ersetzt, daher bitte mit "cscript Script.vbs" aus einer CMD-Shell heraus testen!". Was ist ne CMD-Shell? Ist das die cmd, die ich aufrufen kann?
Also, tut mir leid, aber bin da echt ungebildet auf dem Gebiet.
Aber lernwillig!
Also wenn ich die 3 Tage auf 0 setze, dann kann ichs ja sofort testen, richtig?
Dann müssten in dem Ordner nurnoch die Dateien und Ordner vorhanden sein, die "nichtloeschen" heißen, richtig?
Und soll ich die Dateiendung auf .vbs belassen? Oder doch eher .bat? ._.
Tut mir leid das ich so viele Fragen stelle..^^
Mein Problem liegt, lag daran, das es für mich Fachchinesisch ist.
Ich hab das zwar kopiert, und nen wenig gerallt, aber leider hab ich z.B. schon wieder keine Ahnung davon,
was du mit dieses Satz meinst @bastla "Das effektive Löschen habe ich hier durch Ausgabe des Datei-/Ordnerpfades ersetzt, daher bitte mit "cscript Script.vbs" aus einer CMD-Shell heraus testen!". Was ist ne CMD-Shell? Ist das die cmd, die ich aufrufen kann?
Also, tut mir leid, aber bin da echt ungebildet auf dem Gebiet.
Aber lernwillig!
Also wenn ich die 3 Tage auf 0 setze, dann kann ichs ja sofort testen, richtig?
Dann müssten in dem Ordner nurnoch die Dateien und Ordner vorhanden sein, die "nichtloeschen" heißen, richtig?
Und soll ich die Dateiendung auf .vbs belassen? Oder doch eher .bat? ._.
Tut mir leid das ich so viele Fragen stelle..^^
Hallo Alkenix!
Da Dein Vorhaben ja nicht ganz ungefährlich ist (auch wenn es vorläufig nur um Testdaten geht), hielt ich es für sinnvoll, zunächst eine Simulation in der Form vorzunehmen, dass für jede zu löschende Datei eine Zeile der Art
und für jeden Ordner eine Zeile
ausgegeben wird. Damit schon während der Testphase auch Ordner "gelöscht" werden, müssen diese bereits leer sein. Im Echtbetrieb werden vorweg die Dateien gelöscht und dann untersucht, ob dadurch auch ein Ordner gänzlich leer ist - wenn ja, wird dieser ebenfalls entfernt.
Deine Vorgangsweise sollte so sein:
Wenn alles ok aussieht, die Zeile 36 auf
reduzieren und die Zeile 48 zu
machen - dadurch wird beim nächsten Start des Scripts (dann auch per Doppelklick möglich) nix mehr ausgegeben, sondern nur noch gelöscht.
Zum Nachlesen der Befehle könntest Du Dir die Befehlsreferenz "script56de.chm" etwa von http://dieseyer.de/ besorgen ...
Grüße
bastla
Mein Problem liegt, lag daran, das es für mich Fachchinesisch ist.
... was es (nach etwas Beschäftigung damit) ja nicht unbedingt bleiben muss ... Da Dein Vorhaben ja nicht ganz ungefährlich ist (auch wenn es vorläufig nur um Testdaten geht), hielt ich es für sinnvoll, zunächst eine Simulation in der Form vorzunehmen, dass für jede zu löschende Datei eine Zeile der Art
-24.10.2010 17:58:28 C:\Dokumente und Einstellungen\pweberling\Desktop\Test\Ein Unterordner\WegDamit.txt
--C:\Dokumente und Einstellungen\pweberling\Desktop\Test\Ein Unterordner
Deine Vorgangsweise sollte so sein:
- Datei als zB "C:\Loeschen.vbs" speichern (Achtung, wenn Du den Windows-Editor verwendest, hängt dieser noch ein ".txt" an den Namen an, daher beim Speichern als "Dateityp" "Alle Dateien" wählen oder den Namen unter Anführungszeichen setzen).
- Mit Windows-Taste + r (= Ausführen...) und der Eingabe von
cmd
eine CMD-Shell (früher: "DOS-Eingabeaufforderung" genannt) öffnen. - In dieser Shell mit
cscript C:\Loeschen.vbs
das Script starten und die Ausgaben prüfen.
Wenn alles ok aussieht, die Zeile 36 auf
Datei.Delete
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete
Zum Nachlesen der Befehle könntest Du Dir die Befehlsreferenz "script56de.chm" etwa von http://dieseyer.de/ besorgen ...
Also wenn ich die 3 Tage auf 0 setze, dann kann ichs ja sofort testen, richtig?
Damit würden alle Dateien, die vor heute erstellt wurden, erfasst - um auch die heutigen Dateien einzubeziehen, müsstest Du -1 verwenden.Grüße
bastla
So..Also ich hab das ma getestet..
Dann kam folgendes in der CMD:
I:\>cscript C:\Loeschen.vbs
Microsoft (R) Windows Script Host, Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.
Das sah für mich "ok" aus. Oo
Und nun hab ich das halt ma umgeändert, und wenn ich doppelklicke passiert nix. :D
Naja, und wenn ich das wieder mit dem cmd befehlt ausführe, passiert ebenfalls nix.
Erm, ich benutze das Notepad++ zum bearbeiten und habe die "bekannten Endungen" ausgestellt.
Somit seh ich ja ob es vbs oder txt ist.
Nur es passiert halt nichts. Seltsam, oder nicht?
Dann kam folgendes in der CMD:
I:\>cscript C:\Loeschen.vbs
Microsoft (R) Windows Script Host, Version 5.7
Copyright (C) Microsoft Corporation 1996-2001. Alle Rechte vorbehalten.
Das sah für mich "ok" aus. Oo
Und nun hab ich das halt ma umgeändert, und wenn ich doppelklicke passiert nix. :D
Naja, und wenn ich das wieder mit dem cmd befehlt ausführe, passiert ebenfalls nix.
Erm, ich benutze das Notepad++ zum bearbeiten und habe die "bekannten Endungen" ausgestellt.
Somit seh ich ja ob es vbs oder txt ist.
Nur es passiert halt nichts. Seltsam, oder nicht?
Hallo Alkenix!
Neuer Versuch (mit - hinsichtlich der Ausschlüsse - altem Code):
"0 Tage" ist jetzt so zu verstehen, dass auch Dateien von heute nicht verschont werden sollen ...
Die Ausschlüsse werden übrigens nur für Dateien, nicht für Ordner berücksichtigt.
Es sind jetzt nochmals die Bildschirmausgaben integriert (daher über "
Grüße
bastla
P.S.:
Neuer Versuch (mit - hinsichtlich der Ausschlüsse - altem Code):
Set fso = CreateObject("Scripting.FileSystemObject")
Set WSHShell = WScript.CreateObject("WScript.Shell")
' * hier eigenen Bedürfnissen anpassen *
strOrdnerliste = "C:\Dokumente und Einstellungen\pweberling\Desktop\Ordnerliste.txt"
strAusschlussliste = "C:\Dokumente und Einstellungen\pweberling\Desktop\Ausschluss.txt"
Aufheben = 0 'Anzahl der Tage
' * Ende der Anpassungen *
Set objOrdnerliste = fso.OpenTextFile(strOrdnerliste, 1)
Verzeichnis = Split(objOrdnerliste.ReadAll, vbCrLF)
objOrdnerliste.Close
Set objAusschlussliste = fso.OpenTextFile(strAusschlussliste, 1)
Exclude = Split(objAusschlussliste.ReadAll, vbCrLF)
objAusschlussliste.Close
Heute = Date()
For n = 0 To UBound(Verzeichnis)
Set Ordner = fso.GetFolder(Verzeichnis(n))
DeleteInFolder(Ordner)
Next
Sub DeleteInFolder(Ordner)
Set Dateien = Ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each Datei In Dateien
If Int(Datei.DateLastModified) <= (Heute - Aufheben) Then
ToKeep = False
For Each Ex In Exclude
If LCase(Right(Datei.Name, Len(Trim(Ex)))) = LCase(Trim(Ex)) Then
ToKeep = True
Exit For
End If
Next
If Not ToKeep Then
On Error Resume Next
WScript.Echo "-" &Datei.DateLastModified&" "&Datei.Path 'Datei.Delete
If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit
On Error Goto 0
End If
End If
Next
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each Unter In Ordner.SubFolders
DeleteInFolder(Unter)
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then WScript.Echo "--"&Unter.Path 'Unter.Delete
Next
End Sub
Die Ausschlüsse werden übrigens nur für Dateien, nicht für Ordner berücksichtigt.
Es sind jetzt nochmals die Bildschirmausgaben integriert (daher über "
cscript
" starten!), da so (zur Kontrolle) für jede zu löschende Datei das Dateidatum angezeigt werden kann.Grüße
bastla
P.S.:
Unerwartet Fehler (Code=438) kommt mit der -1 als Tageszahl oben. :o
Bei Fehlermeldungen bitte auch die Zeile anführen (die Meldung konnte in diesem Fall allerdings nur aus Zeile 37 stammen und daher war eine Angabe der Zeile weder möglich noch nötig)...
Hallo Alkenix!
Grüße
bastla
DOCH, irgendwie hätte er auch die "nichtloeschen.txt"s gelöscht. Oo
Steht in der "Ausschluss.txt" ev vor oder nach dem Eintrag "nichtloeschen.txt" noch ein Leerzeichen? Ich editiere oben die Zeile 31, um diesem Umstand vorzubeugen - ansonsten hätte ich vorerst keine Erklärung (bei meinen Tests werden die Ausschlüsse beachtet) ...Grüße
bastla
Hallo Alkenix!
Grüße
bastla
Und jetze? :o
... machst du, was hier nach "Wenn alles ok aussieht" beschrieben ist ... Grüße
bastla
Ok, also das läuft super.
Nur eine Sache ist ja nun noch. ._.
Wenn ein Ordner "nichtloeschen" heißt, dann werden leider alle Dateien darin die nicht "nichtloschen" heißen gelöscht,
und es wäre mir lieber, wenn dann der gesamte Ordner nicht angerührt wird.
Kriegste das noch irgendwie erklärt?>.< Das wäre bombig. :o
Ansonsten ist bis jetzt schonmal alles super. ^^
Ich bin stolz auf dich. xD
Add: Reicht es wenn ich das hier lösche?
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each Unter In Ordner.SubFolders
DeleteInFolder(Unter)
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete 'Unter.Delete
Nur eine Sache ist ja nun noch. ._.
Wenn ein Ordner "nichtloeschen" heißt, dann werden leider alle Dateien darin die nicht "nichtloschen" heißen gelöscht,
und es wäre mir lieber, wenn dann der gesamte Ordner nicht angerührt wird.
Kriegste das noch irgendwie erklärt?>.< Das wäre bombig. :o
Ansonsten ist bis jetzt schonmal alles super. ^^
Ich bin stolz auf dich. xD
Add: Reicht es wenn ich das hier lösche?
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each Unter In Ordner.SubFolders
DeleteInFolder(Unter)
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete 'Unter.Delete
Hallo Alkenix!
Diese Schreibweise führt dazu, dass auch alle Unterordner des betreffenden Ordners von der Bearbeitung ausgeschlossen werden - wenn dies nicht gewünscht sein sollte (also zwar die Dateien des Ordners selbst - unabhängig von ihrem Alter - erhalten bleiben sollen, dies aber nicht für Dateien der Unterordner gelten sollte) müsste das "
Grüße
bastla
Reicht es wenn ich das hier lösche?
Wenn Du nur eine Ordnerebene bearbeiten wolltest - ja; ansonsten lass es mal besser wie's ist bzw ersetze gleich das gesamte Unterprogramm "DeleteInFolder(Ordner)
":Sub DeleteInFolder(Ordner)
ToKeepF = False
For Each Ex In Exclude
If InStr(1, Ordner.Name, Trim(Ex), vbTextCompare) > 0 Then
ToKeepF = True
Exit For
End If
Next
If Not ToKeepF Then
Set Dateien = Ordner.Files
' Alle Dateien in diesem Ordner abklappern
For Each Datei In Dateien
If Int(Datei.DateLastModified) <= (Heute - Aufheben) Then
ToKeep = False
For Each Ex In Exclude
If InStr(1, Datei.Name, Trim(Ex), vbTextCompare) > 0 Then
ToKeep = True
Exit For
End If
Next
If Not ToKeep Then
On Error Resume Next
Datei.Delete
If Err And Err <> 70 Then MsgBox "Unerwarteter Fehler (Code=" & Err & ")", vbCritical: WScript.Quit
On Error Goto 0
End If
End If
Next
'Unterordner abklappern, DeleteInFolder rekursiv aufrufen
For Each Unter In Ordner.SubFolders
DeleteInFolder(Unter)
If (Unter.SubFolders.Count + Unter.Files.Count) = 0 Then Unter.Delete
Next
End If
End Sub
End If
" aus der Zeile 35 in die Zeile 29 verschoben werden.Grüße
bastla
Hallo Alkenix!
"Komplett ersetzt" war dann doch etwas drastisch - gemeint war, den Teil ab der Zeile
(das wäre zB Zeile 24 in meiner letzten oben geposteten Version) zu ersetzen ...
Grüße
bastla
"Komplett ersetzt" war dann doch etwas drastisch - gemeint war, den Teil ab der Zeile
Sub DeleteInFolder(Ordner)
Grüße
bastla
Ich weiß nicht wohin damit, aber ich hätte da noch ne private Frage..Oo
Kann man auch ne vbs für nen bestimmten Ordner (Name: Ordner) schreiben,
die einem dann alle MP3 Dateien darin umbenennt?
Also in der Detailübersicht mit Rechtsklick sieht man ja immer "Name, Interpret, Nummer, Jahr, usw".
Und ich möchte nun gerne wissen, ob man eine .vbs so schreiben kann, das sie jede MP3 umbennent von z.B.:
01 Burning Down.mp3
zu
01 - Burning Down.mp3
oder von
01 Bandname Burning down.mp3
zu
01 - Burning Down.mp3
?
Falls wer ne Idee hat, wäre ich demjenigen MEHR als dankbar, weil ich das schon seit Jahren manuell mache, und das bei unmengen von Dateien. ._.
Kann man auch ne vbs für nen bestimmten Ordner (Name: Ordner) schreiben,
die einem dann alle MP3 Dateien darin umbenennt?
Also in der Detailübersicht mit Rechtsklick sieht man ja immer "Name, Interpret, Nummer, Jahr, usw".
Und ich möchte nun gerne wissen, ob man eine .vbs so schreiben kann, das sie jede MP3 umbennent von z.B.:
01 Burning Down.mp3
zu
01 - Burning Down.mp3
oder von
01 Bandname Burning down.mp3
zu
01 - Burning Down.mp3
?
Falls wer ne Idee hat, wäre ich demjenigen MEHR als dankbar, weil ich das schon seit Jahren manuell mache, und das bei unmengen von Dateien. ._.
Moin Alkenix,
Das kann ich beantworten.
Ansonsten suche mal in unseren FAQ nach "Trittbrettfahrer" bzw neudeutsch "Take-Over" oder "Questnapping".
#718
Und wenn du grad in den FAQ bist, suche auch nach rgc.
Diesen Beitrag hier schliesse ich jetzt.
Grüße
Biber
Das kann ich beantworten.
- Erstelle einen eigenen Beitrag im Bereich "Batch & Shell" unterhalb von "Programmierung/Entwicklung",
- wähle aus der Combobox aus "Ich hab da mal ne Frage"
- und denke dir den Titel "Mp3-Dateien nach bestimmtem Muster per Script umbenennen" oder so ähnlich aus.
Ansonsten suche mal in unseren FAQ nach "Trittbrettfahrer" bzw neudeutsch "Take-Over" oder "Questnapping".
Kann man auch ne vbs für nen bestimmten Ordner (Name: Ordner) schreiben,
die einem dann alle MP3 Dateien darin umbenennt?
Ja.die einem dann alle MP3 Dateien darin umbenennt?
Und ich möchte nun gerne wissen, ob man eine .vbs so schreiben kann, das sie jede MP3 umbennent von z.B.:
Set /a rgc+=1#718
Und wenn du grad in den FAQ bist, suche auch nach rgc.
... weil ich das schon seit Jahren manuell mache, und das be unmengen von Dateien.
Oh, oh.... GEMA liest mit...Diesen Beitrag hier schliesse ich jetzt.
Grüße
Biber