Temporäre Internet-Dateien löschen läuft nicht richtig

  • Hallo,

    ich programmiere gerade für meinen Abgang in der Firma noch ein paar kleine Bereinigungstools, sodass ich in deren Herzen bleibe :)

    Kurze Aufgabenstellung:

    Ich entwickle ein Tool, dass bei jedem User die:
    C:\Dokuments and Settings\%bla%\Cookies
    C:\Dokuments and Settings\%bla%\Local Settings\Temp
    C:\Dokuments and Settings\%bla%\Local Settings\Temporary Internet Files

    löscht bzw. die Dateien löscht, die löschbar sind!
    In der Ursprungsversion hat dies auch ohne Probleme funktioniert, aber nun will ich das ganze mehr oder weniger "variabel" gestalten, sodass man es auch ohne Probleme auf andersspachigen Rechnern verwenden kann.

    Nur löscht er mir nicht mehr den Inhalt von "Temporary Internet Files" und ich weiß auch nicht, woran das liegt ...
    die anderen Ordner löscht er mir ...

    Hat jemand noch bessere Lösungsvorschläge dazu?

    hier der Code:

    Spoiler anzeigen


    #Include <File.au3>
    #Include <Array.au3>

    $var1 = DriveSpaceFree( "c:\" )

    $path = @TempDir
    $splittedPath = StringSplit ( $path, "\")
    $usersDir = $splittedPath[1] & "\" & $splittedPath[2] & "\"
    $localDir = "\" & $splittedPath[4]

    $FileList=_FileListToArray($usersDir)
    If @Error=1 Then
    MsgBox (0,"","Keine Ordner gefunden")
    Exit
    EndIf

    FOR $profileDir IN $FileList
    Runwait(@ComSpec & " /c " & '"RD /S /Q ' & $usersDir & $profileDir & '\Cookies"')
    Runwait(@ComSpec & " /c " & '"RD /S /Q ' & $usersDir & $profileDir & $localDir & '\Temp""')
    Runwait(@ComSpec & " /c " & '"RD /S /Q ' & $usersDir & $profileDir & $localDir & '\Temporary Internet Files""')
    NEXT

    $var2 = DriveSpaceFree( "c:\" )
    $var = $var2 - $var1
    $var = Int ($var * 1000)/1000
    MsgBox (1, "Freigewordener Platz", $var & " MB")

    Einmal editiert, zuletzt von Helikon (29. April 2009 um 15:06)

  • Hi,

    vielleicht:

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    #Include <Array.au3>
    $var1 = DriveSpaceFree( "c:\" )
    $usersDir = @UserProfileDir
    $filefolder = _FileListToArray ($usersdir & "\Cookies")
    _delete_file_folders ($filefolder)
    $filefolder = _FileListToArray ($usersDir & "\Local Settings\Temporary Internet Files")
    _delete_file_folders ($filefolder)
    $filefolder = _FileListToArray (@TempDir)
    _delete_file_folders ($filefolder)
    $var2 = DriveSpaceFree( "c:\" )
    $var = $var2 - $var1
    $var = Int ($var * 1000)/1000
    MsgBox (1, "Freigewordener Platz", $var & " MB")

    [/autoit] [autoit][/autoit] [autoit]

    Func _delete_file_folders ($filefolderlist)
    For $i = 1 To UBound ($filefolderlist) - 1
    FileDelete ($filefolderlist [$i])
    Next
    EndFunc

    [/autoit]

    erweitert:

    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    #Include <Array.au3>
    $var1 = DriveSpaceFree( "c:\" )
    $usersDir = @UserProfileDir
    $filefolder = _FileListToArray ($usersdir & "\Cookies")
    _delete_file_folders ($filefolder)

    [/autoit] [autoit][/autoit] [autoit]

    If StringInStr ($usersdir, "Settings") Then
    $filefolder = _FileListToArray ($usersDir & "\Local Settings\Temporary Internet Files")
    Else
    $filefolder = _FileListToArray ($usersDir & "\Lokale Einstellungen\Temporary Internet Files")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    _delete_file_folders ($filefolder)
    $filefolder = _FileListToArray (@TempDir)
    _delete_file_folders ($filefolder)
    $var2 = DriveSpaceFree( "c:\" )
    $var = $var2 - $var1
    $var = Int ($var * 1000)/1000
    MsgBox (1, "Freigewordener Platz", $var & " MB")

    [/autoit] [autoit][/autoit] [autoit]

    Func _delete_file_folders ($filefolderlist)
    For $i = 1 To UBound ($filefolderlist) - 1
    FileDelete ($filefolderlist [$i])
    Next
    EndFunc

    [/autoit]


    ;-))

    Stefan

    3 Mal editiert, zuletzt von ojo (29. April 2009 um 11:45)

  • hm also deine lösung funktioniert auch nicht wirklich.
    im Local Settings\Temp wird meine Testdatei nicht gelöscht!

  • hab hier was für dich:

    Code
    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255 (Alle Spuren löschen)
    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 1 (Nur Verlauf löschen)
    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 2 (Nur Cookies löschen)
    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8 (Nur Temporäre Internet Dateien (Cache) löschen)
    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 16 (Gespeicherte Formulardaten löschen)
    RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 32 (Gespeicherte Passwörter löschen)

    Den jeweiligen Befehl einfach mit ShellExecute (bzw. Run) ausführen.

  • das gilt aber soweit ich weiß nur für den aktuellen benutzer. Ich lasse aber das Script als Admin laufen und bereinigt alle Benutzerprofile, die auf dem Rechner vorhanden sind. erleichtert immens die Zeit beim Back-Uppen, platz schaffen (grad auf Abteilungsgeräten haben wir 30 oder 40 Benutzerprofile, wenn jeder 300mb temporary internet files hat, ist die platte voll und jeder weiß wie schnell das geht ...
    von hand 30 benutzerprofile durchforsten ist ein wenig aufwendig ...

  • Hi,

    dann überprüf mal:

    1) Mit einem msgbox (0,"",@tempdir) auf was die Variable tempdir verweist.

    2) Nach der Zeile $filefolder = _FileListToArray (@TempDir) füge ein ArrayDisplay ($filefolder) ein und schau nach, ob Deine Datei im Array gelistet wird.

    ;-))

    Stefan

    P.S: Dass Dein Skript über alle Benutzerprofile laufen soll, hättest Du am Anfang Deines Threads klarer herausstellen sollen. Mein Ansatz gilt nur für aktuell angemeldetem Benutzer!!!!
    Also neu:


    Spoiler anzeigen
    [autoit]

    #Include <File.au3>
    #Include <Array.au3>
    $var1 = DriveSpaceFree( "c:\" )
    If FileExists ("C:\Documents and Settings") Then
    $usersDir = _FileListToArray ("C:\Documents and Settings", "*", 2)
    $bengl = True
    Else
    $usersDir = _FileListToArray ("C:\Dokumente und Einstellungen", "*", 2)
    $bengl = False
    EndIf
    For $x = 1 To UBound ($usersdir) -1
    If $bengl = True Then
    $filefolder = _FileListToArray ("C:\Documents and Settings\" & $usersdir [$x] & "\Cookies")
    _delete_file_folders ($filefolder)
    $filefolder = _FileListToArray ("C:\Documents and Settings\" & $usersdir [$x] & "\Local Settings\Temporary Internet Files")
    _delete_file_folders ($filefolder)
    $filefolder = _FileListToArray ("C:\Documents and Settings\" & $usersdir [$x] & "\Local Settings\Temp")
    _delete_file_folders ($filefolder)
    Else
    $filefolder = _FileListToArray ("C:\Dokumente und Einstellungen\" & $usersdir [$x] & "\Cookies")
    _delete_file_folders ($filefolder)
    $filefolder = _FileListToArray ("C:\Dokumente und Einstellungen\" & $usersdir [$x]& "\Lokale Einstellungen\Temporary Internet Files")
    _delete_file_folders ($filefolder)
    $filefolder = _FileListToArray ("C:\Dokumente und Einstellungen\" & $usersdir [$x] & "\Lokale Einstellungen\Temp")
    _delete_file_folders ($filefolder)
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    $var2 = DriveSpaceFree( "c:\" )
    $var = $var2 - $var1
    $var = Int ($var * 1000)/1000
    MsgBox (1, "Freigewordener Platz", $var & " MB")

    [/autoit] [autoit][/autoit] [autoit]

    Func _delete_file_folders ($filefolderlist)
    For $i = 1 To UBound ($filefolderlist) - 1
    FileDelete ($filefolderlist [$i])
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    5 Mal editiert, zuletzt von ojo (29. April 2009 um 14:35)

  • Ich hab es jetzt herausgefunden ...
    es war ein anführungszeichen ...

    wie kann man sowas nur übersehen :(

    Spoiler anzeigen


    #Include <File.au3>
    #Include <Array.au3>

    $var1 = DriveSpaceFree( "c:\" )

    $path = @TempDir
    $splittedPath = StringSplit ( $path, "\")
    $usersDir = $splittedPath[1] & "\" & $splittedPath[2] & "\"
    $localDir = "\" & $splittedPath[4]

    $FileList=_FileListToArray($usersDir)
    If @Error=1 Then
    MsgBox (0,"","Keine Ordner gefunden")
    Exit
    EndIf

    FOR $profileDir IN $FileList
    Runwait(@ComSpec & " /c " & '"RD /S /Q "' & $usersDir & $profileDir & '\Cookies""', "", @SW_HIDE)
    Runwait(@ComSpec & " /c " & '"RD /S /Q "' & $usersDir & $profileDir & $localDir & '\Temp""', "", @SW_HIDE)
    Runwait(@ComSpec & " /c " & '"RD /S /Q "' & $usersDir & $profileDir & $localDir & '\Temporary Internet Files""', "", @SW_HIDE)
    NEXT

    $var2 = DriveSpaceFree( "c:\" )
    $var = $var2 - $var1
    $var = Int ($var * 1000)/1000
    MsgBox (1, "Freigewordener Platz", $var & " MB")

    Und zwar die Anführungszeichen bei RD /S /Q " ...
    Man kann sowas programmieren ,aber dann unterläuft einem so ein Fehler und man braucht 2 Tage um den fehler zu finden :(

  • Ich habe hier bisher auch nur wenige gesehen die für das entfernen eines Ordners den DosBefehl "RD" benutzen, wenn sie ein AutoIt-Script schreiben, in dem die Funktion

    [autoit]

    DirRemove()

    [/autoit]

    verfügbar ist !

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • wie kann man die Temporary Internet Files bei vista löschen durch autoit code funktioniert bei mir nicht

    hier mal ein anderes code

    [autoit]

    #cs ----------------------------------------------------------------------------

    [/autoit][autoit][/autoit][autoit]

    AutoIt Version: 3.3.0.0
    Author: Sirocool

    [/autoit][autoit][/autoit][autoit]

    Script Function:
    Beispiel AutoIt script.

    [/autoit][autoit][/autoit][autoit]

    #ce ----------------------------------------------------------------------------

    [/autoit][autoit][/autoit][autoit]

    ; Script Start - Add your code below here

    [/autoit][autoit][/autoit][autoit]

    #NoTrayIcon
    #RequireAdmin
    #include <GUIConstants.au3>
    #include <ComboConstants.au3>

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    $INI = "test.ini"
    if not FileExists($INI) Then
    $check= Iniread($INI,"Einstellungen", "1","Default")
    Else
    $check = Iniread($INI,"Einstellungen", "1", "Default")
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Beispiel", 270, 73, 344, 448)
    $Datei = GUICtrlCreateMenu("Datei")
    $MenuItem01 = GUICtrlCreateMenuItem("Löschen", $Datei)
    ;GUICtrlSetState($MenuItem01, $GUI_DISABLE)
    $Combo1 = GUICtrlCreateCombo("Auswahl", 16, 24, 145, 25)
    GUICtrlSetData(-1,"Windows XP|Windows Vista","Auswahl")
    $Button1 = GUICtrlCreateButton("Speichern", 176, 24, 75, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit][autoit][/autoit][autoit]

    _start()

    [/autoit][autoit][/autoit][autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    If GUICtrlRead($Combo1) ="Windows XP" then
    _XP()
    ElseIf GUICtrlRead($Combo1) ="Windows Vista" then
    _Vista()
    EndIf
    Case $MenuItem01
    FileDelete ($check)
    EndSwitch
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _XP()
    IniWrite($INI,"Einstellungen","1","C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary Internet Files\")
    EndFunc
    Func _Vista()
    IniWrite($INI,"Einstellungen","1","C:\Users\AppData\Local\Microsoft\Windows\Temporary Internet Files")
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    Func _start()
    MsgBox(0, "Einstellung",$check)
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]