Profil Ordner verschieben

  • Hallo Zusammen,
    ich möchte gerne ein Script schreiben, welches mir folgende Sachen erledigt:

    - verschieben mehrer Ordner die älter als beispielsweise 30 Tage sind
    - es soll nur der Hauptordner überprüft werden (Beispiel: \\Server\Freigabe\Name.Domäne -> Idee wann wurde dieser Ordner zuletzt geändert)

    Ich habe schonmal mit Robocopy rumexperimentiert, allerdings überprüft er mir alle Dateien/Ordner und kopiert auch teilweise etwas weg.
    Allerdings möcht ich nur überprüfen wann der Ordner zuletzt geändert wurde und dann den gesamten Profil Ordner verschieben.

    Ich hoffe Ihr könnt mir hierbei helfen.

    MfG

    Einmal editiert, zuletzt von bugmenot1 (20. Dezember 2010 um 16:04)

  • Spoiler anzeigen
    [autoit]

    #Include <Date.au3>

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

    Local $DaysUnchanged = _FileGetUnchangedDays(@WindowsDir)
    ConsoleWrite($DaysUnchanged & @CRLF)

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

    If $DaysUnchanged > 30 Then
    ;.....
    ;DirMove(....)
    EndIf

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

    Func _FileGetUnchangedDays($sFile)
    ;funkey
    Local $aFileChanged = FileGetTime($sFile, 0)
    If @error Then Return SetError(1, 0, "")
    Return _DateDiff("D", StringFormat("%04s/%02s/%02s", $aFileChanged[0], $aFileChanged[1], $aFileChanged[2]), StringFormat("%04s/%02s/%02s", @YEAR, @MON, @MDAY))
    EndFunc ;==>_FileGetUnchangedDays

    [/autoit]
  • Hallo funkey,
    erstmal danke für dein Script, habs jetzt die letzten Tage versucht in mein zum Teil fertiges Script einzubauen, allerdings stose ich da noch auf das ein oder andere Problem.
    Kann es sein, dass das Script nicht mit Ordner im Netzwerk funktioniert?
    Denn bei einem lokalen Pfad würde er mir alles einwandfrei ausführen, aber sobald ich einen UNC Pfad angebe, läuft er zwar durch gibt aber nichts mehr auf der Console aus.

    [autoit]

    ConsoleWrite($DaysUnchanged & @CRLF)

    [/autoit]

    Sprich das Script führt dann auch keinen Kopiervorgang, etc. aus.

    4 Mal editiert, zuletzt von bugmenot1 (16. Dezember 2010 um 08:39)

    • Offizieller Beitrag

    Poste mal deinen Code, Glaskugel reiben bringt nichts.
    [Blockierte Grafik: http://www.traderboersenboard.de/images/smilies//hexe0008.gif]

  • So hier mal mein bisheriger Code:
    (Wenn ich das Script direkt auf dem Server ausführe, dann funktioniert es wie gewünscht. Wollte es erst von einem anderen Server laufen lassen, aber wenn nicht möglich, dann halt eben nicht :D )
    Es wird noch nichts wie im Script beschrieben verschoben, sondern erstmal nur kopiert.

    Spoiler anzeigen
    [autoit]

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

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

    AutoIt Version: 3.3.6.1
    Author: $cR!pT k!ddY

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

    Script Function:
    Dieses Script verschiebt die Profilordner, das Startmenü, den Desktop und die
    Anwendungsdaten von Usern, die bereits X Tage ausgeschieden sind.
    (Hierzu wird das letzte Änderungsdatum der jeweiligen Ordner genommen!)

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

    Variablen:
    $appFolder Verzeichnis, in dem die CITRIX Anwendungsdaten liegen
    $deskFolder Verzeichnis, in dem der CITRIX Desktop liegt
    $profileFolder Verzeichnis, in dem die CITRIX Profile liegen
    $startFolder Verzeichnis, in dem das CITRIX Startmenü liegt
    $FilterFolder Filter für die Ordnersuche "*"

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

    Achtung!!
    $profileFolder muss zwingend ein lokaler Pfad und kein UNC Pfad sein, da
    sonst das Änderungsdatum der Profil Ordner nicht ausgelesen werden kann.
    #ce ----------------------------------------------------------------------------

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

    ;$cR!pT Start

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

    ;Includes
    #include <array.au3>
    #Include <Date.au3>
    #include <File.au3>
    ;==>Includes

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

    ;Variablen
    $appFolder = "\\fs-piagms05\cx$\Anwendungsdaten\" ;Ordner, in dem sich die Anwendungsdaten befinden
    $deskFolder = "\\fs-piagms05\cx$\Desktop\" ;Ordner, in dem sich der Desktop befindet
    $profileFolder = "G:\CX$\Profile\" ;Ordner, in dem sich die Profile befinden
    $startFolder = "\\fs-piagms05\cx$\Startmenue\" ;Ordner, in dem sich das Startmenü befindet

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

    $FilterFolder = "*" ;Ordner Filter festlegen
    ;==>Variablen

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

    ;Array
    Dim $Array[1] ;Array deklarieren
    $Array[0] = 0 ;Array Größe festlegen
    ;==>Array

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

    Folders($profileFolder) ;Variable $profileFolder in Function Folders als $Pfad schreiben
    Func Folders($Pfad) ;Funktion um Array zu befüllen
    $arr = _FileListToArray($Pfad, $FilterFolder,2) ;Variable $arr deklarieren
    If Not @error Then ;Abbruch bei Fehler
    For $x = 1 To $arr[0] ;Zähler
    ;_ArrayAdd($Array,$Pfad & "\" & $arr[$x]) ;Ordner/Unterordner und Dateien einbeziehen
    _ArrayAdd($Array,$arr[$x]) ;nur Ordner auf erster Ebene in Array schreiben
    $Array[0] = $Array[0]+1 ;Array bei jedem Schleifendurchlauf um +1 vergrößern
    ;Folders($Pfad & "\" & $arr[$x]) ;Pfad + Ordnername in Array schreiben
    Folders($arr[$x]) ;Nur Ordnername in Array schreiben

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

    $DaysUnchanged = _FileGetUnchangedDays($Pfad & $Array[$x]) ;Änderungsdatum von Ordnern auslesen
    ConsoleWrite($DaysUnchanged & @CRLF) ;Tage in Console ausgeben

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

    If $DaysUnchanged > 30 Then ;Wenn Änderungsdatum > x Tage, dann. . .
    MsgBox(0, "Ordner wird verschoben!", $Pfad & $Array[$x])
    $split = StringSplit($Array[$x], ".", 1) ;StringSplit - User.PIAG zerteilen in User + PIAG und in das Array $split schreiben
    ;-----------------------------------------------------------
    ;Failsafe
    ;MsgBox(0, "", $split[1])
    ;MsgBox(0, "", $split[2])
    ;_ArrayDisplay($split)
    ;-----------------------------------------------------------
    DirCopy($Pfad & $Array[$x], "\\fs-piagms05\allgemein\Datenaustausch\mbm\test Backup\Profile\" & $Array[$x], 1) ;Profile kopieren
    DirCopy($appFolder & $split[1], "\\fs-piagms05\allgemein\Datenaustausch\mbm\test Backup\Anwendungsdaten\" & $split[1], 1) ;Anwendungsdaten kopieren
    DirCopy($deskFolder & $split[1], "\\fs-piagms05\allgemein\Datenaustausch\mbm\test Backup\Desktop\" & $split[1], 1) ;Desktop kopieren
    DirCopy($startFolder & $split[1], "\\fs-piagms05\allgemein\Datenaustausch\mbm\test Backup\Startmenue\" & $split[1], 1) ;Startmenü kopieren
    ;Error wenn kein Desktop Ordner, etc. vorhanden? Überspringen??
    EndIf ; ->Ende If-Abfrage

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

    Next ; ->Ende Schleife
    EndIf ; ->Ende If-Abfrage
    EndFunc
    ;==>Func Folders
    _ArrayDisplay($Array) ;Array anzeigen

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

    Func _FileGetUnchangedDays($search)
    $aFileChanged = FileGetTime($search, 0)
    If @error Then Return SetError(1, 0, "")
    Return _DateDiff("D", StringFormat("%04s/%02s/%02s", $aFileChanged[0], $aFileChanged[1], $aFileChanged[2]), StringFormat("%04s/%02s/%02s", @YEAR, @MON, @MDAY))
    EndFunc
    ;==>_FileGetUnchangedDays

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

    ;$cR!pT End

    [/autoit]
  • Du könntest die Netzwerkfreigaben einfach temporär mit

    [autoit]

    DriveMapAdd

    [/autoit]

    mappen dann deine Sachen kopieren und danach wieder mit

    [autoit]

    DriveMapDel

    [/autoit]

    entfernen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Ich denke das Mapping als Netzlaufwerk im Script bringt auch nichts, da ich die Ordner vorher zum Teste bereits manuell gemappt habe und das Script die Ordner dann auch nicht kopieren konnte, bzw. das Datum auslesen.