Mit Call eine Func aufrufen

  • BugFix hat folgendes Script geschrieben :

    AutoIt
    $sFolder = "E:\2022-02-06"
    _DeleteLastYear($sFolder)
    
    Func _DeleteLastYear($_sFolder)
        Local $aPath = StringRegExp($_sFolder, '(.+)\\(\d{4})(-\d{2}-\d{2})$', 3)
        Local $RemoveDir = StringFormat('%s\%s%s', $aPath[0], $aPath[1] - 1, $aPath[2])
        Return DirRemove($RemoveDir)
    EndFunc   ;==>_DeleteLastYear

    Ich hatte die Hoffnung mit

    $sFolder = "E:\2022-02-07"

    Call ("_DeleteLastYear", $sFolder)

    den nächsten Ordner zu löschen aber es passiert nichts

    - keine Fehlerangabe im Script

    - der Ordner wird nicht gelöscht

    Mach ich einen Fehler bei "Call"? :/

    Gruß HP

    Einmal editiert, zuletzt von Musashi (23. April 2022 um 10:57) aus folgendem Grund: Skript in Code-Tags gesetzt (Musashi)

  • Mache ich einen Fehler bei "Call"?

    Warum Call ?

    Hier mal auf die Schnelle mit Fehlermeldung (und dem Parameter  $DIR_REMOVE = Löscht Dateien und Unterverzeichnisse (wie beim DOS-Befehl) :

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Musashi

    weil die Func in Ordnung ist - sie arbeitet einwandfrei, denn sie ist

    von BugFix .

    Ich möchte die Func nur mit anderen Parametern im gleichen Script

    nochmals nutzen.

    Wenn ich das Script kopiere - also 2x ausführe erhalte ich

    $sFolder = "E:\2022-02-06"

    _DeleteLastYear($sFolder)

    Func _DeleteLastYear($_sFolder)

    Local $aPath = StringRegExp($_sFolder, '(.+)\\(\d{4})(-\d{2}-\d{2})$', 3)

    Local $RemoveDir = StringFormat('%s\%s%s', $aPath[0], $aPath[1]-1, $aPath[2])

    Return DirRemove($RemoveDir)

    EndFunc

    Exit

    $sFolder = "E:\2022-02-07"

    _DeleteLastYear($sFolder)

    Func _DeleteLastYear($_sFolder) ; error: _DeleteLastYear () already defined

    Local $aPath = StringRegExp($_sFolder, '(.+)\\(\d{4})(-\d{2}-\d{2})$', 3)

    Local $RemoveDir = StringFormat('%s\%s%s', $aPath[0], $aPath[1]-1, $aPath[2])

    Return DirRemove($RemoveDir)

    EndFunc

    Exit

    Mit

    $sFolder = "E:\2022-02-06"

    _DeleteLastYear($sFolder)

    Func _DeleteLastYear($_sFolder)

    Local $aPath = StringRegExp($_sFolder, '(.+)\\(\d{4})(-\d{2}-\d{2})$', 3)

    Local $RemoveDir = StringFormat('%s\%s%s', $aPath[0], $aPath[1]-1, $aPath[2])

    Return DirRemove($RemoveDir)

    EndFunc

    Exit

    $sFolder = "E:\2022-02-07"

    Call ("_DeleteLastYear", $sFolder)

    Exit

    wird zwar die 1. Func ausgeführt - aber sonst passiert nichts.

    Daher die Frage: Was habe ich mit Call falsch gemacht?

  • Moin,

    Musashi ist anscheinend gerade nicht zu Hause. ;)

    Du brauchts die Funktionsdefinitionen nur einmal im Skript (ich packe die meist nach unten):

    AutoIt
    Func _DeleteLastYear($_sFolder)
        Local $aPath = StringRegExp($_sFolder, '(.+)\\(\d{4})(-\d{2}-\d{2})$', 3)
        Local $RemoveDir = StringFormat('%s\%s%s', $aPath[0], $aPath[1]-1, $aPath[2])
        Return DirRemove($RemoveDir)
    EndFunc

    Die Funktion selbst kannst Du dann jederzeit mit z.B.

    AutoIt
    $sFolder = "E:\2022-02-06"
    _DeleteLastYear($sFolder)
    ; ...
    $sFolder = "E:\2022-02-07"
    _DeleteLastYear($sFolder)

    aufrufen.

    Deine Versuche sind u.a. daran gescheitert, dass Du die Exit-Anweisung mitkopiert hast.

  • Ich möchte die Func nur mit anderen Parametern im gleichen Script

    nochmals nutzen.

    Eine Funktion kannst Du (auch mit anderen Parametern), beliebig oft in einem Skript aufrufen. Das ist ja gerade der Sinn einer Funktion ;) .

    Du darfst nur nicht die Funktion selbst, also Func...EndFunc (unter gleichem Namen) mehrfach im Skript stehen haben.

    EDIT :

    Musashi ist anscheinend gerade nicht zu Hause. ;)

    War gerade etwas essen, daher 2 Minuten zu spät ^^

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (23. April 2022 um 16:02) aus folgendem Grund: typo