AutoIT Schleife - Bestimmte Dateien in Userprofil(e) und Unterordner suchen

  • Hallo Freunde, Römer, Gleichgesinnte ... hört mich an -> i need really your help !


    @first:

    Sorry bin wirklich ganz neu hier und bei autoIT und bin an meine Grenzen in meiner Einarbeitung gestoßen, darum der allgemeine HILFERUF :)


    @zum thema:

    Es geht darum, ich möchte bestimmte txt.Dateien (z.B. xyz.txt) in den Temp-Dateien in den Userprofilen suchen und anschließend an einen
    x-beliebigen Ort z.B. "c:\xyz-Folder\" kopieren.


    Das Problem ist nun folgendes:
    Da ein Rechner ja mehrere Userprofile mit verschiedenen Usern haben kann (z.B. Administrator, Hans, Sabine, etc.) und alle haben eigene Temp-Verzeichnisse haben und ich nicht weis, in welchem Userprofil diese xyz.txt Dateien abgelegt sind, möchte ich durch eine "Schleife" alle Userprofile nach diesen txt-Dateien durchsuchen und bei einem positiven Fund all diese Dateien kopieren, egal auch wenn diese Dateien in mehreren Userprofilen vorhanden sind.


    Weiteres Problem ist, dass sich die Userprofile vom Pfad her in den Betriebssystemen unterscheiden:

    XP -> C:\Dokumente und Einstellungen\...\Temp\xyz.txt

    Win7 -> C:\Users\...\AppData\...\Temp\xyz.txt


    @ALL: -> ich bin ratlos :(


    Thx in advanced im voraus !

  • Hallo aIT-newUSER,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die deutsche Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    und jetzt zu deinen Fragen: dein eigenes Userprofil findest du mit dem Makro @UserProfileDir, teste dazu folgendes

    [autoit]

    MsgBox(0,"Mein Profilverzeichnis",@UserProfileDir)

    [/autoit]

    mit

    [autoit]

    $sProfileDir = StringReplace(@UserProfileDir,@UserName,"")

    [/autoit]

    kannst du den übergeordneten Ordner zu deinem Profilordner feststellen. Für die einzelnen Benutzer müsstest du dann jeweils den (dir bekannten) Namen wissen.
    Abhilfe schafft da mit Sicherheit die Active-Directory UDF von water.
    Um alle Dateien eines Ordners in ein Array zu lesen kannst du

    [autoit]

    _FileListToArray

    [/autoit]

    nehmen. Dieses kannst du dann in einer Schleife abarbeiten.

    mfg autoBert

  • Hallo an alle,

    erstmal vielen Dank für eure Beiträge.

    Der Code zeigt mir zumindest schon mal den Userprofil-Pfad an :) Yahooo :)
    $sProfileDir = StringReplace(@UserProfileDir,@UserName,"")

    Aber die "Active-Directory UDF " bringt mich nicht weiter, da nicht jeder Rechner zwingend sich in einer Domäne befindet, es können auch Standalone-Clints dabei sein.

    Zitat: "...Für die einzelnen Benutzer müsstest du dann jeweils den (dir bekannten) Namen wissen. .."
    -> Weiter hilft es mir nicht weiter zu wissen, welche "Usernamen" sich in dem Userprofil befinden, dann kann ich gleich die Suche nach den Dateien xyz.txt manuell aufnehmen.

    Nein das soll doch die Schleife übernehmen:
    Die Schleife soll alle Unterordner in -> $sProfileDir = StringReplace(@UserProfileDir,@UserName,"") -> durchsuchen, egal
    wieviele Unterordner sich darin befinden. Die Schleife soll Ordner für Ordner nach den Dateien xyz.txt durchsuchen und dann in einen extra Ordner kopieren.

    Leider habe ich keinerlei Erfahrung mit Schleifen und ich weis nicht wie ich das mit dem Code anstellen soll :O ?

  • Hallo,

    ich habe nun mal versucht ein Script mit einer Schleife zu erstellen.
    Es durchsucht den Userprofil-Pfad nach Installationsdateien "install*.log"
    Es wird auch jeweils 1ne Datei gefunden, aber das Script wird nicht in einer Schleife abgearbeitet, da in den Userprofilen mehrere
    "install*.log" Dateien liegen und diese weiteren Install-Dateien werden nicht in den Log-Ordner kopiert.
    Hat jemand ne Ahnung, woran das liegen könnte, oder wo der Fehler ist ? Es sollen alle Install*.log-Dateien welche im Userprofilpfad
    gefunden werden in den Log-Ordner kopiert werden, egal wieviele Dateien gefunden werden.

    Dim $sDir = StringReplace(@UserProfileDir,@UserName,"")
    $Filesearch = FileFindFirstFile($sDir & "\install*.log")

    While 1
    $sFile = FileFindNextFile($Filesearch)
    If @error Then ExitLoop
    FileCopy($sDir & $sFile, "LOGS")
    WEnd
    FileClose($Filesearch)

  • Ich hab mir mal erlaubt das ganze zu basteln:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include "_RecursiveFileListToArray.au3"
    ; das include bekommst du hier: http://www.autoit.de/index.php?page=Thread&threadID=12423

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

    $sSearchdir = StringReplace(@UserProfileDir,@UserName,"")
    ; Evtl geht das leichter, fällt mir aber spontan nix ein^^
    $sLogdir = @DesktopDir & "\Logs\"
    ; Zielpfad für das Kopieren der logs
    DirCreate($sLogdir)
    ; Erstellen des Zielpfades
    $aLogFiles = _RecursiveFileListToArray($sSearchdir, '(?i).*install.*\.log', 1)
    ; Listet alle Dateien in einem Verzeichnis auf die auf den RegEx zutreffen
    ;(?i) entspricht "Egal ob Groß oder Kleinschreibung
    ;.* entspricht mehrere beliebige Zeichen
    If IsArray($aLogFiles) Then
    ; wenn Dateien gefunden wurden dann kopiere alle ins Logdir
    For $i = 1 To $aLogFiles[0]
    FileCopy($aLogFiles[$i], $sLogdir)
    Next
    EndIf

    [/autoit]