DirRemove, ich komm nicht weiter

  • hallo, ich würde gerne eine funktion bauen, mit der man entweder files oder ordner löschen kann.
    um die gefahr zu verkleinern, sind wildcards erlaubt und zu nutzen, so dass der user diese selber angeben muss und sie nicht bereits im script enthalten sind
    (bsp: FileExists("*" & $file & "*")

    so weit so gut. files löschen klappt auch wunderbar, mit oder ohne wildcard, jedoch komm ich mit den ordnern (DirRemove) nicht klar.
    wenn ich den namen komplett angebe, funktioniert es, mit wildcards jedoch nicht ... und was mich verwundert ist, dass nicht mal eine der fehlermeldungen erscheint.
    es geht auch nicht, wenn ich anführungszeichen drumrum setze (DirRemove('"' & $dir & '"', 1) .... warum ?

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    $file = ""
    $dir = "Neuer O*"

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

    If $file <> "" And $dir <> "" Then Exit

    _Del($file, $dir)

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

    Func _Del($file, $dir)
    If $file <> "" Then
    If FileExists($file) Then
    $FileDelete = FileDelete($file)
    If $FileDelete = 0 Then _FileCreate(@scriptdir & '\Could-not-Remove-File(s)-[' & $file & '].ERROR')
    Else
    _FileCreate(@scriptdir & '\No-[' & $file & '].File(s)-Found.ERROR')
    EndIf
    ElseIf $dir <> "" Then
    If FileExists($dir) Then
    $DirRemove = DirRemove($dir, 1)
    If $DirRemove = 0 Then _FileCreate(@scriptdir & '\Could-not-Remove-Dir(s)-[' & $dir & '].ERROR')
    Else
    _FileCreate(@scriptdir & '\No-[' & $dir & ']-Dir(s)-Found.ERROR')
    EndIf
    Else
    Exit
    EndIf
    EndFunc

    [/autoit]
  • es soll eine cmd-funktion werden
    per parameter soll dann zw file (-f) und dir (-d) unterschieden werden.

    entweder wird der komplette datei-/ordnername angegeben, oder wie gesagt, es werden wildcards genutzt.

    das ganze (zumindest laut meinem script) hat sich auf das scriptdir beschränkt.
    im fehlerfall soll datei ausgeben ausgegeben werden, die dann z.B. aussagt, dass keine datei gefunden wurde, oder die datei nicht gelöscht werden konnte.

    mein scriptansatz oben klappt ja auch schon halb, was sich auf Files löschen beschränkt, nur dirs will es iwie nicht löschen.

  • so, habs doch noch hinbekommen, zwar gmixxt, aber "nur" auf die eine oder andere art, geht es wohl net

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    $ErrorFlag = 0
    $file = ""
    $dir = "Neuer*"

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

    If $file <> "" And $dir <> "" Then Exit

    _Del($file, $dir)

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

    Func _Del($file, $dir)
    If $file <> "" Then
    If FileExists($file) Then
    $FileDelete = FileDelete($file)
    If $FileDelete = 0 Then _FileCreate(@scriptdir & '\Could-not-Remove-File(s)-[' & $file & '].ERROR')
    Else
    _FileCreate(@scriptdir & '\No-[' & $file & '].File(s)-Found.ERROR')
    EndIf
    ElseIf $dir <> "" Then
    $Folder =_FileListToArray(@ScriptDir, $dir)
    If @Error Or $Folder[0] <= 0 Then
    _FileCreate(@scriptdir & '\No-[' & $dir & ']-Folder(s)-Found.ERROR')
    Exit
    EndIf
    For $i = 1 To $Folder[0]
    $DirRemove = DirRemove($Folder[$i], 1)
    If $DirRemove = 0 Then $ErrorFlag = 1
    Next
    If $ErrorFlag = 1 Then
    _FileCreate(@scriptdir & '\No-[' & $dir & ']-Folder(s)-Found.ERROR')
    $ErrorFlag = 0
    EndIf
    #cs
    If FileExists($dir) Then
    $DirRemove = DirRemove($dir, 1)
    If $DirRemove = 0 Then _FileCreate(@scriptdir & '\Could-not-Remove-Dir(s)-[' & $dir & '].ERROR')
    Else
    _FileCreate(@scriptdir & '\No-[' & $dir & ']-Dir(s)-Found.ERROR')
    EndIf
    #ce
    Else
    Exit
    EndIf
    EndFunc

    [/autoit]
  • Dir ist schon klar, dass man Mit einem Aufruf entweder Dateien ODER Ordner löschen kann?
    Damit beides auf einmal geht, ElseIF in Z. 19 durch EndIf und dann IF ersetzen :)

  • weiß grad nicht recht, was du meinst ... nen unterschied würde es nicht machen.
    zumindest, weil ich oben deklariert habe, das entweder -f oder -d geht

    [autoit]

    Case $CmdLine[1] = "-del"
    $ff = _ArraySearch($CmdLine, "-f")
    If $ff <> -1 Then $file = $CmdLine[$ff+1]
    $fd = _ArraySearch($CmdLine, "-d")
    If $fd <> -1 Then $dir = $CmdLine[$fd+1]
    If $dir <> "" And $file <> "" Then
    _FileCreate(@scriptdir & "\n-OR-d-Switch-allowed.ERROR")
    Exit
    EndIf

    [/autoit]

    aber was mir noch fehlt ist, was ich auch nicht hinbekomme, dass er ordner mit leerzeichen löscht.

    sobald ich das so eingebe, passiert eigentlich nix mehr: $Folder =_FileListToArray(@ScriptDir, '"' & $dir & '"')

    aber wieso ?

  • Vielleicht so, irgenwie ...
    Allerdings Wildcards bei Ordnern ... *schulter-zuck*

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    $ErrorFlag = 0
    $file = ""
    $dir = "Neuer*"

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


    _Del($file, $dir)

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

    ;===================================================================================
    ; _Del($file = "", $dir = "")
    ;===================================================================================
    Func _Del($file = "", $dir = "")

    If $file And $dir Then
    Return SetError(1)
    ElseIf Not $file And Not $dir Then
    Return SetError(2)
    EndIf

    If $file Then
    If FileExists($file) Then
    If Not FileDelete($file) Then _
    _FileCreate(@scriptdir & '\Could-not-Remove-File(s)-[' & $file & '].ERROR')
    Else
    _FileCreate(@scriptdir & '\No-[' & $file & '].File(s)-Found.ERROR')
    EndIf
    ElseIf $dir Then
    If Not _DirRemoveContents($dir) Then ; Ordnerinhalt löschen.
    If @error = 1 Then
    _FileCreate(@scriptdir & '\No-[' & $dir & ']-Dir(s)-Found.ERROR')
    ElseIf @error = 2 Then
    _FileCreate(@scriptdir & '\No-[' & $dir & ']-Dir(s)-Found.ERROR')
    EndIf
    Else
    If Not DirRemove($dir, 1) Then ; Ordner löschen.
    _FileCreate(@scriptdir & '\Could-not-Remove-Dir(s)-[' & $dir & '].ERROR')
    EndIf
    EndIf
    EndIf

    EndFunc
    ;===================================================================================
    ; _DirRemoveContents($folder)
    ;===================================================================================
    Func _DirRemoveContents($folder)

    Local $list_of_contents, $status
    $list_of_contents = _FileListToArray($folder)
    If IsArray($list_of_contents) Then
    If StringRight($folder, 1) <> "\" Then $folder = $folder & "\"
    If @error = 1 Then Return SetError(1) ; No Files\Folders Found
    For $a = 1 To $list_of_contents[0]
    FileSetAttrib($folder & "\" & $list_of_contents[$a], "-RASH")
    If StringInStr(FileGetAttrib($folder & $list_of_contents[$a]), "D") Then
    $status = DirRemove($folder & $list_of_contents[$a], 1)
    Else
    $status = FileDelete($folder & $list_of_contents[$a])
    EndIf
    Next
    Else
    Return SetError(2) ; Directory doesn't exists
    EndIf
    Return 1

    EndFunc ;==>_DirRemoveContents

    [/autoit]


    Gruß
    Greenhorn