Probleme mit FileMove

  • Hey Leute,

    mal eine kurze Frage. Ich versuche ein Aufräum-Tool für meinen Desktop zu schreiben. Also alle Bilder in einen Ordner, Musik in den nächsten, usw.
    Soweit, sogut, ist ja an sich kein Problem. Ich möchte aber, wenn Dateien doppelt vorhanden sind, das er sie entweder
    a) direkt mit neuem Namen in den Ordner kopiert (quasi wie die Windows-Funktion "kopieren aber beide behalten") oder
    b) die Dateien auf dem Desktop überspringt und ich diese dann mit einer neuen Funktion [FileMove( @ScriptDir & "\*.bmp", @ScriptDir & "\ \Alle\Bilder\*(2).bmp", 0+8 )] verschieben kann.

    Ich bekomme es aber nicht hin, denn jedes mal wenn ich die Dateien mit FileMove( @ScriptDir & "\*.bmp", @ScriptDir & "\ \Alle\Bilder\*.bmp", 0+8 ) versuche zu verschieben und eine Datei ist schon vorhanden, bricht das Programm ab ohne die restlichen, nicht vorhandenen, Dateien zu verschieben.

    Ist es irgendwie mögliche die schon vorhandenen Dateien zu überspringen?

    Danke schonmal im vorraus :)
    MfG NightmarePhoenix

    Zitat

    "Some people feel the rain, others just get wet." - Bob Marley

    Einmal editiert, zuletzt von NightmarePhoenix (6. Oktober 2014 um 23:15)

  • Da von dir kein Script geliefert wird hab ich mal ein Beispiel gemacht, wie man es machen könnte:

    Spoiler anzeigen
    [autoit]

    Func _moveFile($source)
    local $path[4]
    _PathSplit($source,$path[0],$path[1],$path[2],$path[3])
    if $path[3]=".png" then
    $dest=@DesktopDir&"\Alle\Bilder\\"
    ElseIf $path[3]=".mp3" then
    $dest=@DesktopDir&"\Alle\Musik\\"
    endif
    $destpath=$dest&$path[2]&$path[3]
    $i=0
    while FileExists($destpath)
    $destpath=$dest&$path[2]&" ("&$i&")"&$path[3]
    $i+=1
    endif
    FileMove($source,$destpath,BitOR(0,8))
    EndFunc

    [/autoit]
  • Hey, danke schonmal dafür :)

    Sorry, Script hatte ich vergessen... :(

    Meinst du das könnte man irgendwie kürzer schreiben? Hatte eigentlich gehofft das ich ein relativ einfaches Script schreiben könnte :P werde ich aber mal morgen abend dran setzen und versuchen das so einzubauen, falls keine anderen Vorschläge kommen ;)

    Und jetzt hier nochmal das Script:

    Spoiler anzeigen
    [autoit]


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

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

    AutoIt Version: 3.3.8.0
    Author: NightmarePhoenix

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

    Script Function:
    Desktop aufräumen.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>

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

    $Deskren = GUICreate("Deskren", 250, 155)
    $Pics = GuiCtrlCreateButton ("Clear Pictures", 5, 5, 100, 25)
    $Vids = GuiCtrlCreateButton ("Clear Videos", 5, 35, 100, 25)
    $PDF = GuiCtrlCreateButton ("Clear PDF's", 5, 65, 100, 25)
    $HTML = GuiCtrlCreateButton ("Clear HTML's", 5, 95, 100, 25)
    $All = GuiCtrlCreateButton ("Clear All", 5, 125, 100, 25)
    $Info = GUICtrlCreateLabel ("Info-Box für Info's :P", 110, 5, 135, 145)
    GUISetState ()

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

    _main ()

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

    Func _main()

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Pics
    _MovePics()
    Case $msg = $Vids
    _MoveVids()
    Case $msg = $PDF
    _MovePDF()
    Case $msg = $HTML
    _MoveHTML()
    Case $msg = $All
    _MoveAll()
    EndSelect
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd
    EndFunc

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

    ;##############################################################################

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

    Func _MovePics()
    FileMove( @ScriptDir&"\*.jpeg", @Scriptdir&"\Sortieren\Bilder", 0+8)
    FileMove( @ScriptDir&"\*.jpg", @Scriptdir&"\Sortieren\Bilder", 0+8)
    FileMove( @ScriptDir&"\*.png", @Scriptdir&"\Sortieren\Bilder", 0+8)
    FileMove( @ScriptDir&"\*.bmp", @Scriptdir&"\Sortieren\Bilder", 0+8)
    FileMove( @ScriptDir&"\*.gif", @Scriptdir&"\Sortieren\Bilder", 0+8)
    FileMove( @ScriptDir&"\*.pdn", @Scriptdir&"\Sortieren\PaintNET", 0+8)
    GuiCtrlDelete($Info)
    $Info = GUICtrlCreateLabel ("Bilder werden verschoben.", 110, 5, 135, 90)
    EndFunc

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

    ;##############################################################################

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

    Func _MoveVids()
    FileMove( @ScriptDir&"\*.mp4", @Scriptdir&"\Sortieren\Videos", 0+8)
    FileMove( @ScriptDir&"\*.flv", @Scriptdir&"\Sortieren\Videos", 0+8)
    GuiCtrlDelete($Info)
    $Info = GUICtrlCreateLabel ("Videos werden verschoben.", 110, 5, 135, 90)
    EndFunc

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

    ;##############################################################################

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

    Func _MovePDF()
    FileMove( @ScriptDir&"\*.pdf", @Scriptdir&"\Sortieren\PDF", 0+8)
    FileMove( @ScriptDir&"\*.xps", @Scriptdir&"\Sortieren\PDF", 0+8)
    GuiCtrlDelete($Info)
    $Info = GUICtrlCreateLabel ("PDF-Dateien werden verschoben.", 110, 5, 135, 90)
    EndFunc

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

    ;##############################################################################

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

    Func _MoveHTML()
    FileMove( @ScriptDir&"\*.html", @Scriptdir&"\Sortieren\Links", 0+8)
    GuiCtrlDelete($Info)
    $Info = GUICtrlCreateLabel ("HTML-Dateien werden verschoben.", 110, 5, 135, 90)
    EndFunc

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

    ;##############################################################################

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

    Func _MoveAll()
    DirCreate(@Scriptdir&"\Sortieren\Bilder")
    DirCreate(@Scriptdir&"\Sortieren\Videos")
    EndFunc

    [/autoit]
    Zitat

    "Some people feel the rain, others just get wet." - Bob Marley

  • Ich hab dir mal das umgesetzt. Jetzt kannst du dich daran setzen, das noch zu optimieren ;)

    Spoiler anzeigen
    [autoit]

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

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

    AutoIt Version: 3.3.8.0
    Author: NightmarePhoenix

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

    Script Function:
    Desktop aufräumen.

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

    #ce ----------------------------------------------------------------------------

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

    ; Script Start - Add your code below here

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

    #include <GUIConstantsEx.au3>
    #include <GUIConstants.au3>

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

    $Deskren = GUICreate("Deskren", 250, 155)
    $Pics = GuiCtrlCreateButton ("Clear Pictures", 5, 5, 100, 25)
    $Vids = GuiCtrlCreateButton ("Clear Videos", 5, 35, 100, 25)
    $PDF = GuiCtrlCreateButton ("Clear PDF's", 5, 65, 100, 25)
    $HTML = GuiCtrlCreateButton ("Clear HTML's", 5, 95, 100, 25)
    $All = GuiCtrlCreateButton ("Clear All", 5, 125, 100, 25)
    $Info = GUICtrlCreateLabel ("Info-Box für Info's :P", 110, 5, 135, 145)
    GUISetState ()
    $ImageTypes=".jpeg .jpg .png .bmp .gif .pdn"
    $VideoTypes=".mp4 .flv"
    $PdfTypes=".pdf .html"
    $HtmlTypes=".html"
    _main ()

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

    Func _main()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $Pics
    _MovePics()
    Case $msg = $Vids
    _MoveVids()
    Case $msg = $PDF
    _MovePDF()
    Case $msg = $HTML
    _MoveHTML()
    Case $msg = $All
    _MoveAll()
    EndSelect
    If $msg = $GUI_EVENT_CLOSE Then Exit
    WEnd
    EndFunc

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

    Func _moveFile($source,$dest)
    local $path[4]
    _PathSplit($source,$path[0],$path[1],$path[2],$path[3])
    $destpath=$dest&$path[2]&$path[3]
    $i=0
    while FileExists($destpath)
    $destpath=$dest&$path[2]&" ("&$i&")"&$path[3]
    $i+=1
    endif
    FileMove($source,$destpath,BitOR(0,8))
    EndFunc
    ;##############################################################################

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

    Func _MovePics()
    GUICtrlSetData($Info,"Bilder werden verschoben.")
    $search=FileFindFirstFile(@ScriptDir&"\*.*")
    While @error<>1
    $path=FileFindNextFile($search)
    if Not @extended then
    local $path[4]
    _PathSplit($source,$path[0],$path[1],$path[2],$path[3])
    if StringInStr($ImageTypes,$path[3]) then
    _moveFile($path,@Scriptdir&"\Sortieren\Bilder\\")
    endif
    endif
    WEnd
    GUICtrlSetData($Info,"Bilder wurden verschoben.")
    EndFunc

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

    ;##############################################################################

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

    Func _MoveVids()
    GUICtrlSetData($Info,"Videos werden verschoben.")
    $search=FileFindFirstFile(@ScriptDir&"\*.*")
    While @error<>1
    $path=FileFindNextFile($search)
    if Not @extended then
    local $path[4]
    _PathSplit($source,$path[0],$path[1],$path[2],$path[3])
    if StringInStr($VideoTypes,$path[3]) then
    _moveFile($path,@Scriptdir&"\Sortieren\Videos\\")
    endif
    endif
    WEnd
    GUICtrlSetData($Info,"Videos wurden verschoben.")
    EndFunc

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

    ;##############################################################################

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

    Func _MovePDF()
    GUICtrlSetData($Info,"PDF-Dateien werden verschoben.")
    $search=FileFindFirstFile(@ScriptDir&"\*.*")
    While @error<>1
    $path=FileFindNextFile($search)
    if Not @extended then
    local $path[4]
    _PathSplit($source,$path[0],$path[1],$path[2],$path[3])
    if StringInStr($PdfTypes,$path[3]) then
    _moveFile($path,@Scriptdir&"\Sortieren\PDF\\")
    endif
    endif
    WEnd
    GUICtrlSetData($Info,"PDF-Dateien wurden verschoben.")
    EndFunc

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

    ;##############################################################################

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

    Func _MoveHTML()
    GUICtrlSetData($Info,"HTML-Dateien werden verschoben.")
    $search=FileFindFirstFile(@ScriptDir&"\*.*")
    While @error<>1
    $path=FileFindNextFile($search)
    if Not @extended then
    local $path[4]
    _PathSplit($source,$path[0],$path[1],$path[2],$path[3])
    if StringInStr($HtmlTypes,$path[3]) then
    _moveFile($path,@Scriptdir&"\Sortieren\Links\\")
    endif
    endif
    WEnd
    GUICtrlSetData($Info,"HTML-Dateien wurden verschoben.")
    EndFunc

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

    ;##############################################################################

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

    Func _MoveAll()
    GUICtrlSetData($Info,"Dateien werden verschoben.")
    $search=FileFindFirstFile(@ScriptDir&"\*.*")
    While @error<>1
    $path=FileFindNextFile($search)
    if Not @extended then
    local $path[4]
    _PathSplit($source,$path[0],$path[1],$path[2],$path[3])
    if StringInStr($HtmlTypes&" "&$PdfTypes&" "&$VideoTypes&" "&$ImageTypes,$path[3]) then
    if StringInStr($HtmlTypes,$path[3]) then
    _moveFile($path,@Scriptdir&"\Sortieren\Links\\")
    elseif StringInStr($PdfTypes,$path[3]) then
    _moveFile($path,@Scriptdir&"\Sortieren\PDF\\")
    elseif StringInStr($VideoTypes,$path[3]) then
    _moveFile($path,@Scriptdir&"\Sortieren\Videos\\")
    elseif StringInStr($ImageTypes,$path[3]) then
    _moveFile($path,@Scriptdir&"\Sortieren\Bilder\\")
    endif
    endif
    endif
    WEnd
    GUICtrlSetData($Info,"Dateien wurden verschoben.")
    EndFunc

    [/autoit]