Hilfe bei Skript

  • Hallo,

    ich bin hier noch ziemlich neu und habe noch nicht soooo viel mit AutoIT gemacht und stoße nun an meine Grenzen :(

    Ich brauche ein Skript, dass in einen Ordner guckt und hier alle Dateien mit der Endung z.b. .pdf sich anschaut, es soll dann die Datei mit dem aktuellsten Änderungsdatum weiter nutzen. Der Dateiname soll in einem String gespeichert werden. Dann soll es die Datei umbennen in Muster.pdf und eine .Batch ausführen.

    Nach einem Sleep von ca. 1h soll es dann die Datei wieder in Ihren ursprünglichen Dateinamen umbennen und sich beenden.

    Ich weiss schon, dass ich das mit Filegettime machen kann und dieses Datum dann z.b. mit dem heutigen Datum vergleichen kann.
    Aber wie ich das genau verschachtel und mit den Werten weiter arbeite ist mir nicht klar :(


    Könnt Ihr mir hier helfen? Wenn das zuviel verlangt ist sagt es ruhig dann ist auch OK und ich überlege mir etwas anderes oder gebe das ganze auf :D

  • Hi hab dir da mal schnell was zusammengebastelt (Ist jetzt hald nicht gerade so schön aufgebaut ^^).
    Falls er Unterordner auch noch Überprüfen soll musst du einen Anderen Befehl nehmen [hab dir die UDF hochgeladen].

    Hoffe habe es so richtig verstanden und konnte dir Helfen.

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    $PFADvondemPDFOrdner = "C:\"
    $PFADvondemSavePDFOrdner = "C:\"
    $PDFNameNew = "TEMP.pdf"

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

    $Neuste_Datei = ""

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

    _Func__PDF ()

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

    Func _Func__PDF ()
    $FileListToArray = _FileListToArray ($PFADvondemPDFOrdner, "*.pdf", 1)
    If $FileListToArray = 0 Or $FileListToArray = @error Then
    MsgBox (16, "FEHLER", @ScriptLineNumber)
    Else
    For $1 = 1 To $FileListToArray[0] Step 1
    $Filegettime = FileGetTime ($PFADvondemPDFOrdner & $FileListToArray[$1], 1, 0)
    If $Filegettime = 0 Then
    MsgBox (16, "FEHLER", @ScriptLineNumber)
    Else
    If $Neuste_Datei = "" Then
    $Neuste_Datei = $Filegettime[0] & "." & $Filegettime[1] & "." & $Filegettime[2] & "." & $Filegettime[3] & "." & $Filegettime[4] & "." & $Filegettime[5] & "." & $FileListToArray[$1]
    Else
    $Stringsplit = StringSplit ($Neuste_Datei, ".")
    If $Stringsplit = @error Then
    MsgBox (16, "FEHLER", @ScriptLineNumber)
    Else
    If $Stringsplit[0] > 7 Then
    If $Stringsplit[1] < $Filegettime[0] Then
    $Neuste_Datei = $Filegettime[0] & "." & $Filegettime[1] & "." & $Filegettime[2] & "." & $Filegettime[3] & "." & $Filegettime[4] & "." & $Filegettime[5] & "." & $FileListToArray[$1]
    Else
    If $Stringsplit[2] < $Filegettime[1] Then
    $Neuste_Datei = $Filegettime[0] & "." & $Filegettime[1] & "." & $Filegettime[2] & "." & $Filegettime[3] & "." & $Filegettime[4] & "." & $Filegettime[5] & "." & $FileListToArray[$1]
    Else
    If $Stringsplit[3] < $Filegettime[2] Then
    $Neuste_Datei = $Filegettime[0] & "." & $Filegettime[1] & "." & $Filegettime[2] & "." & $Filegettime[3] & "." & $Filegettime[4] & "." & $Filegettime[5] & "." & $FileListToArray[$1]
    Else
    If $Stringsplit[4] < $Filegettime[3] Then
    $Neuste_Datei = $Filegettime[0] & "." & $Filegettime[1] & "." & $Filegettime[2] & "." & $Filegettime[3] & "." & $Filegettime[4] & "." & $Filegettime[5] & "." & $FileListToArray[$1]
    Else
    If $Stringsplit[5] < $Filegettime[4] Then
    $Neuste_Datei = $Filegettime[0] & "." & $Filegettime[1] & "." & $Filegettime[2] & "." & $Filegettime[3] & "." & $Filegettime[4] & "." & $Filegettime[5] & "." & $FileListToArray[$1]
    Else
    If $Stringsplit[6] < $Filegettime[5] Then
    $Neuste_Datei = $Filegettime[0] & "." & $Filegettime[1] & "." & $Filegettime[2] & "." & $Filegettime[3] & "." & $Filegettime[4] & "." & $Filegettime[5] & "." & $FileListToArray[$1]
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    Else
    MsgBox (16, "FEHLER", @ScriptLineNumber)
    EndIf
    EndIf
    EndIf
    EndIf
    Next
    $Stringsplit = StringSplit ($Neuste_Datei, ".")
    If $Stringsplit = @error Then
    MsgBox (16, "FEHLER", @ScriptLineNumber)
    Else
    If $Stringsplit[0] > 7 Then
    For $1 = 1 To $Stringsplit[0] Step 1
    If $1 = 7 Then
    $Dateiname = $Stringsplit[$1]
    Else
    If $1 > 7 Then
    $Dateiname = $Dateiname & "." & $Stringsplit[$1]
    Else

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

    EndIf
    EndIf
    Next
    If FileExists ($PFADvondemPDFOrdner & $Dateiname) = 1 Then
    FileMove ($PFADvondemPDFOrdner & $Dateiname, $PFADvondemSavePDFOrdner & $PDFNameNew, 0)
    For $1 = 1 To 60000 Step 1
    Sleep (1000)
    ToolTip ($1 & " / 60000")
    Next
    FileMove ($PFADvondemSavePDFOrdner & $PDFNameNew, $PFADvondemPDFOrdner & $Dateiname, 0)
    Else
    MsgBox (16, "FEHLER", @ScriptLineNumber)
    EndIf
    EndIf
    EndIf
    EndIf
    EndFunc

    [/autoit]
  • Ist jetzt hald nicht gerade so schön aufgebaut

    aha ^^
    Kleiner Vorschlag:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <Date.au3>

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

    $sFile = _DirGetLatestFile(@DesktopDir, "*.pdf")
    If @error Then Exit
    ConsoleWrite("Neuste Datei: " & $sFile & @LF)
    FileMove($sFile, @DesktopDir & "\Muster.pdf")
    ; Tu hier was immer du mit der Batch tun wolltest lieber direkt in Autoit...
    Sleep(60 * 1000 * 60) ; Solches 'Warten' ist sehr unsicher und vor allem auch schlechter Stil - Ich wette mit dir, dass du irgend wie anderst erkennen kannst wann die Datei fertig 'bearbeitet' ist...
    FileMove(@DesktopDir & "\Muster.pdf", $sFile)

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

    Func _DirGetLatestFile($sDir, $sFileType = "*")
    If StringRight($sDir, 1) <> "\" Then $sDir &= "\"
    If Not FileExists($sDir) Then SetError(1)
    Local $aNew[2] = [999999999, ''], $aFiles = _FileListToArray($sDir, $sFileType, 1)
    If Not IsArray($aFiles) Then SetError(2)
    For $i = 1 To $aFiles[0]
    $a = FileGetTime($sDir & $aFiles[$i], 0, 0)
    If @error Then ContinueLoop
    $d = _DateDiff("s", $a[0] & "/" & $a[1] & "/" & $a[2] & " " & $a[3] & ":" & $a[4] & ":" & $a[5], _NowCalc())
    If $d < $aNew[0] Then
    $aNew[0] = $d
    $aNew[1] = $i
    EndIf
    Next
    If $aNew[1] = '' Then SetError(3)
    Return $sDir & $aFiles[$aNew[1]]
    EndFunc ;==>_DirGetLatestFile

    [/autoit]

    LG
    Christoph :)


  • ah ok ^^ ja brauchte so was bis jetzt noch nie :D