Blade1981 10 Geschrieben 5. Oktober 2006 Melden Teilen Geschrieben 5. Oktober 2006 Wieder einmal ein VBS-Problemchen ;) Ich muss aus der Registry den Pfad auslesen, welchen Outlook für temporäre Dateien verwendet, da dieser nicht auf jedem Rechner der selbe ist (Sucht man den Pfad per Explorer, sucht man vergeblich, auch wenn man Systemdateien und versteckte Dateien anzeigen lässt). Diesen Ordner muss man einfach leeren können, da wir hiermit oftmals Probleme wegen FAXEN haben, bis man diesen Ordner eben geleert hat! Hier mein Code, der eben so weit eigentlich funktioniert. Aber es kommt immer die Meldung: "Das System kann die angegebene Datei nicht finden!" nachdem er den Ordner leeren soll. Ich habe den Inhalt der Variablen "loeschen" schon in eine .bat-Datei schreiben lassen und wenn ich diese manuell ausführe, werden die Dateien gelöscht, was bedeutet, dass die löschen-zeile doch soweit richtig ist, oder? Was ist noch falsch? Hier der bisherige Code: Dim Path Dim Value Dim WshShell Dim loeschen set objshl = createobject("wscript.shell") Set WshShell = CreateObject("Wscript.Shell") Path = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security\OutlookSecureTempFolder" Value = WshShell.RegRead(Path) loeschen = "del """ + Value + "*.*"" /q" WScript.Echo loeschen Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.CreateTextFile("c:\temp.bat") 'objFile.WriteLine(loeschen) 'objFile.WriteLine "pause" 'objFile.WriteLine "del c:\temp.bat" Die letzten 3 Zeilen erstellen die Batch-Datei, welche sich nach Ausführen selbst wieder löschen soll, aber ich weiß nicht wie ich diese Batch-Datei "starten" kann!? und das ist auch die unschönere Art. Thankx for Infos and Help! Zitieren Link zu diesem Kommentar
notesuser3 10 Geschrieben 6. Oktober 2006 Melden Teilen Geschrieben 6. Oktober 2006 Um z.B. die Bat auszuführen hilft Dir folgendes: DIM intReturnCode DIM ProgrammPath ProgrammPath = "C:\Ordern" programmFile = "löschen.bat" Set WshShell = WScript.CreateObject("Wscript.Shell") intReturnCode = WshShell.Run(programmPath & programmFile) Die Syntax für WshShell.Run lautet normal: rückgabeWert = WshShell.Run(Befehl, fensterTyp, warten) Genaueres findest unter: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/script56/html/6f28899c-d653-4555-8a59-49640b0e32ea.asp Gruß Notesuser3 Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 6. Oktober 2006 Autor Melden Teilen Geschrieben 6. Oktober 2006 Vielen Dank, das mit der Batch-Datei ausführen funktioniert jetzt! Wenn noch jemand eine Lösung weiß und posten könnte, ohne dass ich diese temporäre Batch-Datei erstellen muss, dann habe ich dafür immer gerne ein offenes Auge ;) Zitieren Link zu diesem Kommentar
notesuser3 10 Geschrieben 6. Oktober 2006 Melden Teilen Geschrieben 6. Oktober 2006 Hast Du gar keinen Ansatz für das Löschen unter VB-Skript geschrieben, oder fehlt ein Teil des Codes? Um eine Datei zu löschen brauchst Du folgendes: Set fso = CreateObject("Scripting.FileSystemObject") fso.DeleteFile dateiName, erzwingen DateiName ist klar, wobei natürlich der Pfad mit angegeben werden muss, den liest Du ja aus der Registry aus. Erzwingen ist ein Optionaler Parameter, entweder True oder False. Damit sollte es funktionieren. Falls Du noch fragen hast, melde Dich. Gruß NotesUser3 Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 6. Oktober 2006 Autor Melden Teilen Geschrieben 6. Oktober 2006 Die Batch-Datei löscht sich selbst ;) (Die letzten 3 Zeilen, welche ich zunächst auskommentierte zeigt, was in diese Batch-Datei geschrieben wird) Danke für deine Infos! Hier noch das komplette Script so wie ich es bisher habe - funktionsfertig: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Dim Path Dim Value Dim WshShell Dim loeschen Set WshShell = CreateObject("Wscript.Shell") 'Aus Registry auslesen, wo die Temporären Dateien liegen Path = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security\OutlookSecureTempFolder" Value = WshShell.RegRead(Path) 'Variable mit Batch-Befehlszeile gefüllt (wird später in eine Batch-Datei geschrieben) loeschen = "del """ + Value + "*.*"" /q" 'Erstellung der Batch-Datei, welche die Temporären Dateien löscht Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.CreateTextFile("c:\temp.bat") 'Füllen der Batch-Datei objFile.WriteLine "@echo off" objFile.WriteLine "echo Achtung, die Dateien aus folgendem Verzeichnis werden geloescht:" objFile.WriteLine "echo." objFile.WriteLine "echo " + Value objFile.WriteLine "echo." objFile.WriteLine "echo Abbrechen mit CTRL+C - weiter mit Enter" objFile.WriteLine "echo." objFile.WriteLine "Pause" objFile.WriteLine "echo." objFile.WriteLine "echo Bitte warten sie, bis die Dateien geloescht wurden!" objFile.WriteLine(loeschen) objFile.WriteLine "echo." objFile.WriteLine "echo Fertig!" objFile.WriteLine "echo." objFile.WriteLine "pause" objFile.WriteLine "del c:\temp.bat" objFile.Close 'Erstellte Batch-Datei ausführen WshShell.Run "c:\temp.bat" ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Vielleicht bringt es ja jemand Anderen auch weiter! Noch zu bemerken: Die Batch-Datei muss nach dem Füllen wieder geschlossen werden, da sie sonst nicht ausgeführt werden kann! Zitieren Link zu diesem Kommentar
notesuser3 10 Geschrieben 6. Oktober 2006 Melden Teilen Geschrieben 6. Oktober 2006 Die Batch-Datei löscht sich selbst ;) (Die letzten 3 Zeilen, welche ich zunächst auskommentierte zeigt, was in diese Batch-Datei geschrieben wird) Danke für deine Infos! Hier noch das komplette Script so wie ich es bisher habe - funktionsfertig: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Dim Path Dim Value Dim WshShell Dim loeschen Set WshShell = CreateObject("Wscript.Shell") 'Aus Registry auslesen, wo die Temporären Dateien liegen Path = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security\OutlookSecureTempFolder" Value = WshShell.RegRead(Path) 'Variable mit Batch-Befehlszeile gefüllt (wird später in eine Batch-Datei geschrieben) loeschen = "del """ + Value + "*.*"" /q" 'Erstellung der Batch-Datei, welche die Temporären Dateien löscht Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.CreateTextFile("c:\temp.bat") 'Füllen der Batch-Datei objFile.WriteLine "@echo off" objFile.WriteLine "echo Achtung, die Dateien aus folgendem Verzeichnis werden geloescht:" objFile.WriteLine "echo." objFile.WriteLine "echo " + Value objFile.WriteLine "echo." objFile.WriteLine "echo Abbrechen mit CTRL+C - weiter mit Enter" objFile.WriteLine "echo." objFile.WriteLine "Pause" objFile.WriteLine "echo." objFile.WriteLine "echo Bitte warten sie, bis die Dateien geloescht wurden!" objFile.WriteLine(loeschen) objFile.WriteLine "echo." objFile.WriteLine "echo Fertig!" objFile.WriteLine "echo." objFile.WriteLine "pause" objFile.WriteLine "del c:\temp.bat" objFile.Close 'Erstellte Batch-Datei ausführen WshShell.Run "c:\temp.bat" ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Vielleicht bringt es ja jemand Anderen auch weiter! Noch zu bemerken: Die Batch-Datei muss nach dem Füllen wieder geschlossen werden, da sie sonst nicht ausgeführt werden kann! Statt mit der Bat-Datei müsste es aber auch wie folgt funktionieren: DIM fso Set fso = CreateObject("Scripting.FileSystemObject") fso.DeleteFolder(value, true) Set fso = nothing Gruß Notesuser3 Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 6. Oktober 2006 Autor Melden Teilen Geschrieben 6. Oktober 2006 was sagt diese Zeile aus? Set fso = nothing Ich dacht mirs auch schon, dass es jetzt im Endeffekt besser gewesen wäre, das ganz über VBS zu lösen, aber wenn so auch geht ;) Und das Verzeichnis selbst darf ja nicht gelöscht werden, sondern nur die Dateien! Hmmm... Wenn man danach das Verzeichnis einfach wieder neu erstellt? Dann könnte man das natürlich auch machen! Zitieren Link zu diesem Kommentar
notesuser3 10 Geschrieben 6. Oktober 2006 Melden Teilen Geschrieben 6. Oktober 2006 Set fso = nothing leert das FSO Objekt. Kann man auch weglassen. Bei längeren Programm kann es aber sinnvoll sein, insbesondere wenn man die Variable vielleicht in anderen Programmteilen wieder verwende möchte und eventuell dann ein anderer Wert drin stehen soll. Ist so eine Angewohnheit aus Access-Zeiten. Mit fso.DeleteFile DateiName (bei Dir Value?) kann auch eine bestimmte Datei gelöscht werden. Sicherlich geht es auch mit dem Batch. Aber so wie ich Dich verstanden habe wolltest Du doch eine Lösung für VB-Skript. Außderdem geht es schneller und er Code ist kürzer. Gruß Notesuser3 Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 6. Oktober 2006 Autor Melden Teilen Geschrieben 6. Oktober 2006 Also muss ich nur noch alle Dateien abfragen, die in diesem Verzeichnis sind, in ein Array schreiben und dann diese Dateien löschen lassen oder geht das auch einfacher wie bei Batch zum Beispiel mit dem *.*?! Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 6. Oktober 2006 Autor Melden Teilen Geschrieben 6. Oktober 2006 Hab das jetzt noch so ausprobiert: Dim Path Dim Value Dim WshShell Dim FSO Set WshShell = CreateObject("Wscript.Shell") Path = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security\OutlookSecureTempFolder" Value = WshShell.RegRead(Path) Set FSO = CreateObject("Scripting.FileSystemObject") FSO.DeleteFolder (Value, true) die letzte Zeile darf keine Klammer enthalten (Beim Aufrufen einer Unterroutine dürfen keine Klammern verwendet werden). Also, Klammer weg - Ergebnis: Zeile 12 - Zeichen 1 - Der Pfad wurde nicht gefunden! ??? Zitieren Link zu diesem Kommentar
notesuser3 10 Geschrieben 6. Oktober 2006 Melden Teilen Geschrieben 6. Oktober 2006 Also Du kannst z.B. den Ordner durchlaufen und jede Datei in diesem Ordner löschen. Dim fso Dim fs Set Fso = CreateObject("Scripting.FileSystemObject") fso.GetFolder(value) IF fso.Files.Count <> 0 Then for each fs in fso.Files fso.DeleteFile(value, true) NEXT END IF So müsste der Code aussehen. Ich habe Ihn jetzt nicht getestet, aber es dürfte der richtig Ansatz sein. Gruß Notesuser3 Zitieren Link zu diesem Kommentar
notesuser3 10 Geschrieben 6. Oktober 2006 Melden Teilen Geschrieben 6. Oktober 2006 Hab das jetzt noch so ausprobiert: Dim Path Dim Value Dim WshShell Dim FSO Set WshShell = CreateObject("Wscript.Shell") Path = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security\OutlookSecureTempFolder" Value = WshShell.RegRead(Path) Set FSO = CreateObject("Scripting.FileSystemObject") FSO.DeleteFolder (Value, true) die letzte Zeile darf keine Klammer enthalten (Beim Aufrufen einer Unterroutine dürfen keine Klammern verwendet werden). Also, Klammer weg - Ergebnis: Zeile 12 - Zeichen 1 - Der Pfad wurde nicht gefunden! ??? Lasse Dir mal die Variable Value in einer MsgBox anzeigen. Was steht darin? Gruß Notesuser3 Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 6. Oktober 2006 Autor Melden Teilen Geschrieben 6. Oktober 2006 Es steht dieses drin: C:\Dokumente und Einstellungen\Hochberger\Lokale Einstellungen\Temporary Internet Files\OLK1\ In dieser Zeile meckert er: IF fso.Files.Count <> 0 Then "Das Objekt unterstützt diese Eigenschaft oder Methode nicht.: 'Files' Zitieren Link zu diesem Kommentar
notesuser3 10 Geschrieben 6. Oktober 2006 Melden Teilen Geschrieben 6. Oktober 2006 Damit funktioniert es: Dim fso Dim fs DIM f Set Fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder("C:\Test") IF f.Files.Count <> 0 Then for each fs in f.Files fso.DeleteFile fs, true NEXT END IF Lege Dir ein Paar Dateien in einem Ordner C:\Test an . Und führe das Skript aus. Danach musst du die Codeteile nur noch in deinem Skript verbauen. Gruß Notesuser3 Zitieren Link zu diesem Kommentar
Blade1981 10 Geschrieben 6. Oktober 2006 Autor Melden Teilen Geschrieben 6. Oktober 2006 Super! Damit geht es, hast Recht! Hab es auch schon angepasst an den Pfad aus der Registry! Dankeschön :) Und wie das jetz genau funktoiniert, das muss ich mir einfach mal durchdenken, nachdem mir mit objekten usw einfach die Erfahrung und auch die Kenntnisse fehlen. Allgemeines Programmieren eben :suspect: Hier der angepasste Code: ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Dim Path Dim Value Dim WshShell Dim FSO Dim fs DIM f Set WshShell = CreateObject("Wscript.Shell") 'Aus Registry auslesen, wo die Temporären Dateien liegen Path = "HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Outlook\Security\OutlookSecureTempFolder" 'Ausgelesenen Pfad in die Variable <Value> schreiben Value = WshShell.RegRead(Path) Set Fso = CreateObject("Scripting.FileSystemObject") Set f = fso.GetFolder(Value) If f.Files.Count <> 0 Then For each fs in f.Files FSO.DeleteFile fs, true Next END IF ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, Danke nochmals :) Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.