seppxx
Goto Top

(VBS) Datei mit bestimmter Endung löschen

servus erstmal!


ich brauch ein script, das folgende voraussetzungen erfüllen muss:

- alle .ost Datein löschen
- keine anderen Datein löschen
- das verzeichnis muss aus ner Txt-Datei oder wenigstens aus nem array gelesen werden


mein code bis etz:


Verzeichnis = "C:\Dokumente und Einstellungen\xxx\Desktop\ost löschen\test"   
Aufheben    = 0                     ' Anzahl der Tage  





Set fso = CreateObject("Scripting.FileSystemObject")  
Set ordner = fso.GetFolder(Verzeichnis)
Set dateien = ordner.files

heute = Date()

For Each datei In dateien
  If datei.DateLastModified > (heute - Aufheben) Then

	If datei.name = "xxxxxxxxxxxxxxx" Then  
		msgbox("gesuchte datei existiert")  

	else 
		msgbox("keine datei gefunden")  
	end if
	
'--------------------------------------------------------------------------------------  
'die ganze if-abfrage mach ich nur, damit ich seh, ob er nur nen string annimmt oder auch  *.ost  
'--------------------------------------------------------------------------------------  
	
  datei.Delete      'hier wird einfach jede Datei gelöscht!  



  End If
Next


'----------------------------  
'eingentlich ist der pfeil genau anders rum, und zwar so: <  
'hab ich nur gemacht, das die bedingung immer erfüllt ist  








'------------------------------------------------------------------------------------------  
'Error-Log:  


zeit = Time()
Set oFile = fso.OpenTextFile("C:\Dokumente und Einstellungen\xxx\Desktop\ost löschen\log.txt",8,true)  
If err.Number <> 0 Then
    oFile.WriteLine "Fehler2: " & err.Number & " " & err.Description  
    err.Clear
Else
    oFile.WriteLine "Kein Fehler aufgetreten.    " & heute & "     " & zeit  
End If
oFile.close


' -------------------------------------------------------------------------------------------  



msgbox ("fertig")  



folgendes is noch zu sagen:
-zum Verständnis: er löscht mir alle! Datein aus dem Ordner "test"

-er geht immer nur nach dem string (hier: xxxxxxxxxxxxxxxx); er soll aber *.ost Datein löschen!!
sprich wenn ich "*.ost" oder *.ost mach, geht nix

-hab mir des so vorgestellt in Richtung substring

-das er mir die verzeichnisse aus ner txt Datei ausließt mach ich selber noch mal, nur wenn mal wer auf Anhieb nen code hat ;)


danke schonmal fürs lesen^^


servus

Content-ID: 79322

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

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

rubberduck
rubberduck 28.01.2008 um 14:40:12 Uhr
Goto Top
Hi Seppxx

Erstmal:
Wenn Du Code Postest, dann verwende das Code-Tag
Erleichtert uns allen das Leben face-wink

Das was Du suchst, ist:

IF INSTR(1,datei.name,".ost") <> 0 THEN....  

Such mal im Google nach script56.chm. Z.Bsp. bei dieseyer.de kannst Du es runterladen.
gemini
gemini 28.01.2008 um 14:46:36 Uhr
Goto Top
Hallo seppxx,

willkommen im Forum.

Wieso wertest du DateLastModified aus, wenn doch sowieso ALLE ost-Dateien unabhängig von irgendeinem Datum gelöscht werden?

For Each datei In dateien
    If Right(datei.name, 4) = ".ost" Then  
    datei.Delete
    End If
Next

HTH,
gemini
gemini
gemini 28.01.2008 um 14:56:54 Uhr
Goto Top
@rubberduck

 IF INSTR(1,datei.name,".ost") <> 0 THEN....  
Das würde aber auch mein Lieblingslied Schnee.zu.Ostern.mp3 von Cochise löschen.
Da wär ich aber böse, das kann ich dir sagen face-big-smile

Gruß,
gemini
bastla
bastla 28.01.2008 um 15:40:19 Uhr
Goto Top
Hallo seppxx!

Such mal im Google nach script56.chm. Z.Bsp. bei dieseyer.de kannst Du es runterladen.
... und darin findest Du dann zB auch die Methode "GetExtensionName" des "FileSystemObject"s (für Fälle, in denen Du nicht sicher sein kannst, dass die Extension inkl "." genau 4 Zeichen lang ist).

Wenn Du, so wie in diesem Fall, nach einer bekannten Extension suchst, passt natürlich gemini's Lösung.

Damit Dir keine Datei entwischt, könntest Du ev noch ein LCase() verwenden:
If LCase(Right(datei.name, 4)) = ".ost" Then  

Grüße
bastla
rubberduck
rubberduck 28.01.2008 um 15:49:28 Uhr
Goto Top
@gemini
Ja, Ja. Mach Dich nur Lustig... face-big-smile
Ist mir zwar auch durch den Kopf, aber ich muss halt nebenbei auch arbeiten face-devilish

Darum auch der Tipp mit script56.chm. Dort findet er alles was er braucht (und noch vieles mehr...)
seppxx
seppxx 28.01.2008 um 20:05:12 Uhr
Goto Top
Hallo seppxx,

willkommen im Forum.

Wieso wertest du DateLastModified aus, wenn
doch sowieso ALLE ost-Dateien unabhängig
von irgendeinem Datum gelöscht werden?

For Each datei In dateien
>     If Right(datei.name, 4) =
> ".ost" Then  
>     datei.Delete
>     End If
> Next
> 

H
Set fso = CreateObject("Scripting.FileSystemObject")  
TH,
gemini



erst mal vielen herzlichen dank für die tipps ;)

das mit dem datelastmodified und der 0 is ja eigentlich egal, hauptsache der Pfeil ist umgedreht; aber ja, du hast recht^^


so nun weiter:

das nächste Problem hab ich beim einlesen txt --> array

hab mir nun folgenden code besorgt:

http://dieseyer.de/scr/dateizeilenweiselesenbearbeitenschreiben.vbs


hab natürlich nur nen kleinen Absatz rausgenommen


wie verhält es sich doch nun zu meinem schon fertig, bis jetzt funktionierenden code:

genauer gesagt stört mich folgendes:


Dim fso           : Set fso 
Set FileIn  = FSO.OpenTextFile(Datei, 1 ) 

mein source:

Set fso = CreateObject("Scripting.FileSystemObject")  
Set ordner = fso.GetFolder(Verzeichnis)


was hat es mit dem fso auf sich?

natürlich bringt es mir beim erzeugen des scripts jedesmal Fehler


hat wer vll ein gut verständliches snippet zum txt-Datei-->array einlesen?
bastla
bastla 28.01.2008 um 20:25:15 Uhr
Goto Top
Hallo seppxx!

hat wer vll ein gut verständliches snippet zum txt-Datei-->array einlesen?
Set fso = CreateObject("Scripting.FileSystemObject")  
Set oFile = fso.OpenTextFile("D:\DeineDatei.txt", 1)  
sGesamtText = oFile.ReadAll
aText = Split(sGesamtText, vbCrLF)
oFile.Close
Wenn ich's eilig habe (also meistens face-wink), dann:
aText = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("D:\DeineDatei.txt", 1).ReadAll, vbCrLF)  
Ergebnis in beiden Fällen: aText() enthält zeilenweise den Inhalt Deines Textfiles. Auslesen zB so:
For i = 0 To UBound(aText)
    WScript.Echo "Zeile " & Right(String(4, " ") & CStr(i), 4) & ": " & aText(i)  
Next
Der letzte Teil macht mehr Spaß, wenn das Script über "cscript" gestartet wird ... face-wink
was hat es mit dem fso auf sich?
Ich schließe mich der Empfehlung an, Dir die "script56.chm" (dieseyer.de wurde schon erwähnt) zu besorgen und Dich einmal darin umzusehen ...

Grüße
bastla
seppxx
seppxx 28.01.2008 um 20:38:16 Uhr
Goto Top
ich will doch nur, das mir eine txt Datei Zeilenweise eingelesen wird
und die jeweilige Zeile in nem Array gespeichert wird
damit ich nachher den Pfad: C\docs und einstell\ & mein_array(100) & \anwendungsdaten\.....
variabel hab


danke sehr
bastla
bastla 28.01.2008 um 21:20:12 Uhr
Goto Top
Hallo seppxx!

ich will doch nur, das mir eine txt Datei Zeilenweise eingelesen wird und die jeweilige Zeile in nem Array gespeichert wird
Das will ich doch auch, deswegen steht ja der entsprechende Code seit knapp einer Stunde da oben ...

Grüße
bastla
seppxx
seppxx 28.01.2008 um 21:35:08 Uhr
Goto Top
ok es tut mir leid!
wollt ich irgendwie nicht sehen^^

ich hau das ganze noch in meinen source rein, dann post ich hier in den nächsten Tagen (schule face-sad )das Gesamtergebniss


vielen Dank nochmal und sry
bastla
bastla 28.01.2008 um 21:43:25 Uhr
Goto Top
Hallo seppxx!

Schon ok - überhaupt, wenn man bedenkt, wie lange heute schon Montag ist ... face-wink

Grüße
bastla
SvenGuenter
SvenGuenter 29.01.2008 um 09:24:04 Uhr
Goto Top
Dim retstring
Dim sqlstring As String
Dim arrayretstring

Set comm = New ADODB.Command

Set comm.ActiveConnection = condb


'***************************************************************************  
'datei ist eine Übergabevariable die ich der Funktion mitgegeben habe. Diese enthält den Pfad 'und den Namen der Datei. Als Beispiel: C:\Programme\Dateiloeschen\programm.ini  
'Sprich die Zeile öffnet eine Datei zum einlesen auf dem Datenkanal 1  
'***************************************************************************  


Open datei For Input As #1


'***************************************************************************  
'Whileschleife bis das ende des Textfiles erreiche ist oder der beginn des Textfiles  
'***************************************************************************  

While Not EOF(1)
'***************************************************************************  
'Einfügen der ersten Zeile des Textfiles  
'Hier hast du auch dein array. Zur Erklärung vielleicht da ich nicht weiß ob du das weißt.  

'***************************************************************************  

    Line Input #1, retstring
'***************************************************************************  
'Zerlegen des Strings nach ; als Delemiter  
' Eine Variable vom Typ Variant kann direkt als Array genutzt werden ohne dieses ( Array )   
'im Vorfeld extra zu deklarieren  
'***************************************************************************  

arrayretstring = Split(retstring, ";")  


'***************************************************************************  
'Einfügen des Datensatzes mit dem Comm Objekt  
'Dies ist aus meinem Quellcode um dir zu Zeigen wie du die einzelnen Felder des Arrays  
' ansprichst  
'Das comm Object ist ein Objekt welches ich mit Dim comm as new ADODB.COMMAND am beginn definiert habe. Brauchst du für dein Projekt nicht  
'***************************************************************************  

sqlstring = "INSERT INTO T_USERSTATUS (username,computername,sessionnumber,ipnummer,datum,uhrzeit,status) VALUES ('" & arrayretstring(0) & "','" & arrayretstring(1) & "','" & arrayretstring(2) & "','" & Replace(arrayretstring(3), """", "") & "','" & arrayretstring(4) & "','" & arrayretstring(5) & "','" & arrayretstring(6) & "')"  
    
    With comm
        .CommandText = sqlstring
        .CommandType = adCmdText
        .Execute
    End With




Wend

'***************************************************************************  
'Schließen des Datenkanals und leeren des Objektes  
'***************************************************************************  

Set comm = Nothing

Close #1


Natürlich funktionieren die anderen Lösungen auch. Es ging mir nur darum dir zu zeigen das es nicht immer da File System Object sein muss. VB6 bietet einige Möglichkeiten direkte Kanäle zu öffnen und dann mit den Daten zu arbeiten. Wenn man eine einfache sequentielle Datenverarbeitung machen will reicht die Kanalmethode vollkommen. Das FSO bietet einfach mehr Möglichkeiten für erweiterte Bearbeitungen.

Das zu der Frage warum FSO oder wieso FSO ;o)


Gruß

Sven

edit----------------------------------------
Um der Frage voregzugreifen warum FSO oder einfach Datenkanal.
Das FSO bietet sich an um gewisse BEARBEITUNGEN zu machen. Wenn man aber einfach Sequentiell arbeiten will reicht der Datenkanal. Ausserdem ist dieser in der Speicherverwaltung auch nicht so groß man bruacht keine Objekte ncihts, sondern kann diesen direkt ansprechen.
seppxx
seppxx 31.01.2008 um 09:07:47 Uhr
Goto Top
so ich hoffe mal, der Thread wird nicht zu unübersichtlich, aber egal^^:

'**********************************************************************************************************************  
'**********************************************************************************************************************  
'**********************************************************************************************************************  
'***														    ***  
'***						Beschreibung:							    ***  
'***													 	    ***	  
'***					Script zum löschen der .ost Datei					    ***  
'***				Man kann die Dateiendung natürlich auch ändern					    ***  
'***			Der Benutzername wird aus der Datei "Benutzer.txt" zeilenweiße ausgelesen		    ***  
'***		Es werden nur die Datein gelöscht, die älter als die angegebene Zahl von Tagen ist		    ***  
'***													 	    ***  
'***													 	    ***  
'***													 	    ***  
'***						Autor:								    ***  
'***													 	    ***  
'***					    xxxxxxxxxxx 							    ***  
'***													 	    ***			'***													 	    ***  
'***													 	    ***  
'***													 	    ***  
'***													 	    ***  
'***					  Stand: 31.01.2008							    ***  
'***													 	    ***  
'***													 	    ***  
'***													 	    ***  
'**********************************************************************************************************************  
'**********************************************************************************************************************  
'**********************************************************************************************************************  





'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set oFile = fso.OpenTextFile("G:\Arbeit\ost löschen\Benutzer.txt", 1)  
sGesamtText = oFile.ReadAll
aText = Split(sGesamtText, vbCrLF)
oFile.Close

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  







'Hier beginnt das auslesen der Datei "Benutzer.txt"  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  

aText = Split(CreateObject("Scripting.FileSystemObject").OpenTextFile("G:\Arbeit\ost löschen\Benutzer.txt", 1).ReadAll, vbCrLF)         '<~~~~~~~WICHTIG!!!  


For i = 0 To UBound(aText)
    'WScript.Echo "Zeile " & Right(String(4, " ") & CStr(i), 4) & ": " & aText(i)  

	'msgbox(right(String(4, " ") & CStr(i), 4))    'Zeilennummer  
	'msgbox(aText(i))                                     'Inhalt der Zeile(i)  



dim pfad
pfad = "G:\Arbeit\ost löschen\" & aText(i) & "\mail"       '<~~~~~~~WICHTIG!!!  



'msgbox(pfad)  

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  







'Für jede Zeile von der txt-Datei wird das Datum und die Dateiendung geprüft und anschließend gelöscht  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  

Verzeichnis = pfad
Aufheben    = 14                     ' Anzahl der Tage  


'----------------------------------------------------------------------------------------------------------------------  
'Set fso = CreateObject("Scripting.FileSystemObject")  
Set ordner = fso.GetFolder(Verzeichnis)
Set dateien = ordner.files

heute = Date()
'----------------------------------------------------------------------------------------------------------------------  


For Each datei In dateien
  If datei.DateLastModified > (heute - Aufheben) Then

	
    	If Right(datei.name, 4) = ".ost" Then  
	
   	   datei.Delete

   	End If
	

  end if


Next


'----------------------------  
'eingentlich ist der pfeil genau anders rum, und zwar so: <  
'hab ich nur gemacht, das die bedingung immer erfüllt ist  
'----------------------------  


msgbox("*.ost Datei des Benutzers " & aText(i) &  " erfolgreich gelöscht")  


Next

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  







'Error-Log:  
'~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  

zeit = Time()
Set oFile = fso.OpenTextFile("G:\Arbeit\ost löschen\log.txt",8,true)  
If err.Number <> 0 Then
    oFile.WriteLine "Fehler2: " & err.Number & " " & err.Description  
    err.Clear
Else
    oFile.WriteLine "Kein Fehler aufgetreten.    " & heute & "     " & zeit  
End If
oFile.close

'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  
'~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  


msgbox ("Fertig!!!")  

ich weiß, nicht besonders auskommentiert...

hoffe ich kann jemanden mit der selben Aufgabe einiges an Zeit und Arbeit ersparen ;)


servus