FileCopy, FileMove-Bug??? oder ein ganz besonderer Ordner Internet-Tmp.-Verz

  • Hi community,

    FileCopy, FileMove sind in der Regel einer der einfachsten Befehle, die es gibt, dennoch bekomme ich ständig wie auch immer ich es anpacke einen Rückgabefehler.

    Scriptaufgabe: Geht auf die Webseite, startet den 2:36Minuten-Flash (superchristlich, Script ist auch nicht für mich), der legt in Eurem Internet-Temp-Verz. eine *.flv-Datei ab, die woanders hin verschoben werden soll, da das Internet-Temp-Verz. regelmässig gelöscht wird Gruss Jan


    [autoit]

    ; Flashfilme http://www.ced24.com/video/blitz.html 2:36 legt .flv Datei an $quelle=FileGetShortName("C:\Dokumente und Einstellungen\" & @UserName & "\Lokale Einstellungen\Temporary Internet Files\") $ziel=FileGetShortName ("D:\Ordner Gottes\Filme\") $a=FileCopy( $quelle & "*.*", $ziel, 8) If $a= 0 then $a = "0 >>> Fehler" MsgBox(4096,"", "Rückgabewert: " & $a & @CRLF & $quelle & "*.*" & @CRLF & $ziel ,10)

    [/autoit]
  • Moin janrenzlow,

    lass dir mal so :
    MsgBox( 0, "Test", "C:\Dokumente und Einstellungen\" & @UserName & "\Lokale Einstellungen\Temporary Internet Files\" )
    anzeigen was beim zuammensetzen rauskommt.
    Außerdem würde ich den Filter '*.*' im FileCopy() auf '*.flv' ändern ;)

    P.S. Außerdem gibt es in 'Temporary Internet Files' Unterordner. Wahrscheinlich liegen die FLV-Dateien dort.

  • Hallo Oscar,

    auch das habe ich probiert ohne Erfolg.Gruss Jan :S

    Auch diese Variante geht nicht. Bitte einfache und doppelte Anführungszeichen berücksichtigen (der Pfad hat viele Leerzeichen)

    [autoit]


    ; Flashfilme http://www.ced24.com/video/blitz.html 2:36 legt .flv Datei an
    $quelle= RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "Cache") & "\*.flv"
    ;$quelle="'C:\Dokumente und Einstellungen\'" & @UserName & "'\Lokale Einstellungen\Temporary Internet Files\*.flv'"
    $ziel="'D:\Ordner Gottes\Filme\'"
    $a=FileCopy( $quelle, $ziel, 8)
    If $a= 0 then $a = "0 >>> Fehler"
    MsgBox(4096,"", "Rückgabewert: " & $a & @CRLF & $quelle & @CRLF & $ziel & @CRLF & @AppDataDir ,10)

    [/autoit]

    4 Mal editiert, zuletzt von janrenzlow (20. Februar 2008 um 11:55)

  • Ersetz einfach im ersten Beispiel 'FileGetShortName()' gegen 'FileGetLongName()'.
    Die Funktion arbeitet auch mit Verzeichnissen.
    Dann bleibt nur noch das Problem der Unterverzeichnisse, aber dazu findest hier einige Beispiele ;) .

  • Hallo JanSchmidt,
    FileGetLongName ist insofern irrelevant, da der Pfad sehr viele Leerzeichen enthält, die durchaus Fallstricke bedeuten können. Deshalb war es meine Absicht diese mögliche Fehlerquelle mit FileGetShortName auszuschliessen.

    Batch Datei copy /v /-y C:\Dokume~1\Kurt\Lokale~1\Tempor~1\*.flv D:\Ordner~1\Filme\*.*

    geht auch nicht.

    Noch etwas seltsames: Öffne ich im Explorer das Verzeichnis, bekomme ich unzählige Dateien angezeigt. Gehe ich in den Dos-Modus und gebe ich dort

    dir C:\Dokume~1\Kurt\Lokale~1\Tempor~1\*.*

    ein, bekomme ich keine Dateien angezeigt, auch nicht mit

    dir C:\Dokume~1\Kurt\Lokale~1\Tempor~1\*.* /A RASH

    (na gut, bei letzerem kriege ich noch zusätzlich desktop.ini angezeigt - aber das wars auch!)
    . SELTSAM!!. Gruss Jan

    Einmal editiert, zuletzt von janrenzlow (20. Februar 2008 um 12:26)

  • Kannst du die Dateien mit :
    dir C:\Dokume~1\Kurt\Lokale~1\Tempor~1\*.flv /s
    sehen?
    Und wie gesagt es höchst wahrscheinlich das du die Unterverzeichnisse 'durchlaufen' mußt.

  • danke, JanSchmidt - Dein Tip geht. Mein Betriebsystem ist übrigens XP. Danke!!!!

    dir C:\Dokume~1\Kurt\Lokale~1\Tempor~1\*.flv /s - funktioniert


    Interessant er zeigt ihn mir im Verzeichnis dir C:\Dokume~1\Kurt\Lokale~1\Tempor~1\Content.IE5\FLOC92K8 an - hä?

  • Aufgabe des Skriptes: Im Dateisuche im temporären Internetordner nach .flv -Dateien , Ergebnisse abspeichern als c:\flv.tmp, lesen der in dieser Datei enthaltenen Dateipfade und verschieben dieser Dateien in den Zielordner.Optional öffnen des Zielordners und mit dem Realplayer. Problem erstellen der flv.tmp und Auslesen in das Array $aArray. Hat vielleicht einer ne Idee? Gruss Jan


    [autoit]

    Ire#include <file.au3>
    #include <GUIConstants.au3>
    #include <Array.au3>

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

    $ziel='"D:\Ordner Gottes\Filme\"'
    GUICreate ( '.flv verschieben' , 300, 160, 0, 0)
    $c01= GUICtrlCreateInput($ziel, 10, 10, 260, 20)
    $c02= GUICtrlCreateButton ('', 275, 10, 20, 20, $BS_Icon)
    $c03= GUICtrlSetImage (-1, 'shell32.dll', -5, 0)
    $c04= GUICtrlCreateCheckbox('Ordner anschliessend öffnen', 10, 35, 280, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $c05= GUICtrlCreateCheckbox('Filme anschliessend öffnen', 10, 60, 280, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateGroup ('Ergebnis:', 10, 80, 220, 60)
    $c06= GUICtrlCreateLabel('', 15, 95, 210, 42)
    $c09= GUICtrlCreateButton ('Starten', 240, 110, 50, 25)
    GUICtrlCreateLabel('', 0, 141, 300, 22, $SS_ETCHEDFRAME)
    $c07= GUICtrlCreateLabel('Bereit...', 5, 143, 100, 16)
    $c08= GUICtrlCreateProgress (141, 142, 198, 20)
    GUICtrlSetState(-1,$GUI_CHECKED)

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

    GUICtrlSetState(-1,$GUI_CHECKED)
    GUISetState (@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $c09
    Starte()
    EndSelect
    Wend

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

    Func Starte()
    $sVerschoben=''
    GUICtrlSetData($c08, 5)
    $quelle =StringTrimRight(FileGetShortName(RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\', 'Cache') & '\desktop.ini'), 12) & '\*.flv'
    GUICtrlSetData($c07, 'Suche .flv-Dateien...')
    ClipPut('dir ' & $quelle & ' /s /B /W > c:\flv.tmp')
    RunWait(@ComSpec & ' /c ' & ' dir ' & $quelle & ' /s /B /W > c:\flv.tmp', '', @SW_HIDE); /s =rekursiv /B=Kurzdarstellung /W=8.3 Format
    Sleep (2000)
    GUICtrlSetData($c08, 50)
    GUICtrlSetData($c07, ' Werte Suche aus...')
    $hflvtmp = FileOpen ('c:\flv.tmp', 0)
    $iZaehleZeilen = _FileCountLines('c:\flv.tmp')
    Dim $aArray[Int($iZaehleZeilen) + 1]
    Dim $aFehler[Int($iZaehleZeilen) + 1]
    For $i = 1 to $iZaehleZeilen
    ;$sPfad = FileGetShortName(FileReadline($hflvtmp, $i))
    $sPfad = FileReadline($hflvtmp, $i)
    If $sPfad ='Datei nicht gefunden' Or StringLen($aArray[$i]) < 3 Then
    Else
    $iRueckgabewert = FileMove ($sPfad), $Ziel, 8)
    $aArray[$i]=$sPfad
    If $iRueckgabewert = 0 then $aFehler[$i]=$sPfad
    EndIf
    Next
    _ArrayDisplay($aArray)
    FileClose ($hflvtmp)
    GUICtrlSetData($c08, 75)
    GUICtrlSetData($c07, 'Liefere Ergebnis...')
    For $i = 1 to $iZaehleZeilen
    $sVerschoben = $sVerschoben & @CRLF & $aArray[$i]
    Next
    GUICtrlSetData($c06, $sVerschoben)
    GUICtrlSetData($c08, 90)

    If GUICtrlGetState($c04) = 80 then
    GUICtrlSetData($c07, 'Öffne Explorer...')
    Run('explorer ' & $ziel)
    EndIf

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

    If GUICtrlGetState($c05) = 80 then
    $sRealplayer=StringTrimRight(RegRead('HKEY_CLASSES_ROOT\Applications\RealPlay.exe\shell\open\command',''), 4)
    GUICtrlSetData($c07, 'Öffne Realplayer...')
    For $i = 1 to $iZaehleZeilen
    If $aArray[$i]='Keine Datei gefunden' Or StringLen($aArray[$i]) < 3 then ExitLoop
    Run ($sRealplayer & $aArray[$i])
    Next
    EndIf
    GUICtrlSetData($c08, 100)

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

    GUICtrlSetData($c07, 'Bereit f. neue Suche.')
    EndFunc

    [/autoit]
  • Hi,

    dies ist der letzte Stand. Ich arbeite wieder mit langen Dateinamen, alles geht - nur das Verschieben der Dateien nicht. Vielleicht hat einer eine Idee , Gruss Jan

    [autoit]


    #include <file.au3>
    #include <GUIConstants.au3>
    #include <Array.au3>
    $ziel='D:\Ordner Gottes\Filme'
    GUICreate ( '.flv verschieben' , 300, 160, 0, 0)
    $c01= GUICtrlCreateInput($ziel, 10, 10, 260, 20)
    $c02= GUICtrlCreateButton ('', 275, 10, 20, 20, $BS_Icon)
    $c03= GUICtrlSetImage (-1, 'shell32.dll', -5, 0)
    $c04= GUICtrlCreateCheckbox('Ordner anschliessend öffnen', 10, 35, 280, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    $c05= GUICtrlCreateCheckbox('Filme anschliessend öffnen', 10, 60, 280, 20)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateGroup ('Ergebnis:', 10, 80, 220, 60)
    $c06= GUICtrlCreateLabel('', 15, 95, 210, 42)
    $c09= GUICtrlCreateButton ('Starten', 240, 110, 50, 25)
    GUICtrlCreateLabel('', 0, 141, 300, 22, $SS_ETCHEDFRAME)
    $c07= GUICtrlCreateLabel('Bereit...', 5, 143, 100, 16)
    $c08= GUICtrlCreateProgress (141, 142, 198, 20)
    GUICtrlSetState(-1,$GUI_CHECKED)
    GUICtrlSetState(-1,$GUI_CHECKED)
    GUISetState (@SW_SHOW)
    While 1
    $msg = GUIGetMsg()

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

    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $c09
    Starte()
    Case $msg = $c02
    Ordner()
    EndSelect
    Wend

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

    Func Starte()
    Dim $aArray[2]
    Dim $aFehler[2]
    Dim $aDateien[2]
    Dim $sVerschoben=''
    Dim $sZiel1='d:\ordner gottes\filme'
    GUICtrlSetData($c08, 5)
    $quelle =RegRead('HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders\', 'Cache') & '\*.flv'
    GUICtrlSetData($c07, 'Suche .flv-Dateien...')
    ClipPut('dir ' & $quelle & ' /s /B > c:\flv.tmp')
    RunWait(@ComSpec & ' /c ' & ' dir "' & $quelle & '" /s /B > c:\flv.tmp', '', @SW_HIDE); /s =rekursiv /B=Kurzdarstellung /W=8.3 Format
    Sleep (2000)

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

    Run('notepad c:\flv.tmp')
    GUICtrlSetData($c08, 50)
    GUICtrlSetData($c07, ' Werte Suche aus...')
    $hflvtmp = FileOpen ('c:\flv.tmp', 0)
    If $hflvtmp = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
    EndIf
    If GUICtrlRead($c01) <> 'D:\Ordner Gottes\Filme' then $sZiel1 = (GUICtrlRead($c01)

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

    $iZaehleZeilen = _FileCountLines('c:\flv.tmp')
    ReDim $aArray[$iZaehleZeilen + 1]
    ReDim $aFehler[$iZaehleZeilen + 1]
    ReDim $aDateien[$iZaehleZeilen + 1]
    MsgBox(4096,"jj", $iZaehleZeilen & @CRLF & FileReadLine( $hflvtmp, 1) & @CRLF & $sZiel1 & @CRLF & $quelle ,5)
    For $i = 1 to $iZaehleZeilen
    ;$sPfad = FileGetShortName(FileReadline($hflvtmp, $i))
    $sPfad = FileReadLine($hflvtmp, $i)
    $iRueckgabewert = FileMove ('"' &$sPfad & '"', '"' & $sZiel1 & '\"',
    ;$iRueckgabewert = 0 then RunWait(@ComSpec & ' /c ' & 'move "' & $aArray[$i] & ' ' & $sZiel1 & '\"' , '', @SW_SHOW)
    $aArray[$i]=$sPfad
    $aDat=StringSplit($sPfad, '\')
    $aDateien[$i] = $aDat[$aDat[0]]
    If $iRueckgabewert = 0 then $aFehler[$i]=$sPfad
    Next
    _ArrayDisplay($aArray)
    _ArrayDisplay($aDateien, '$sDateien')
    _ArrayDisplay($aFehler, 'Fehler')
    FileClose ($hflvtmp)
    GUICtrlSetData($c08, 75)
    GUICtrlSetData($c07, 'Liefere Ergebnis...')
    For $i = 1 to $iZaehleZeilen
    $sVerschoben = $sVerschoben & @CRLF & $aDateien[$i]
    Next
    GUICtrlSetData($c06, $sVerschoben)
    GUICtrlSetData($c08, 90)

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

    If GUICtrlGetState($c04) = 80 then
    GUICtrlSetData($c07, 'Öffne Explorer...')
    Run('explorer ' & $ziel)
    EndIf
    If GUICtrlGetState($c05) = 80 then
    $sRealplayer=StringTrimRight(RegRead('HKEY_CLASSES_ROOT\Applications\RealPlay.exe\shell\open\command',''), 4)
    GUICtrlSetData($c07, 'Öffne Realplayer...')
    For $i = 1 to $iZaehleZeilen
    If StringLen($aArray[$i]) < 3 then ExitLoop
    Run ($sRealplayer & ' "' & $sZiel1 & '\' & $aDateien[$i] & '"')
    Next
    EndIf
    GUICtrlSetData($c08, 100)
    GUICtrlSetData($c07, 'Bereit f. neue Suche.')
    EndFunc

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

    Func Ordner()
    $sAuswahl = FileselectFolder('Geben Sie bitte den Speicherort für .flv Dateien an', 'D:\Ordner Gottes', 7, 'D:\Ordner Gottes\Filme')
    If @error = 1 Then
    MsgBox(4096, 'Abbruch', 'Sie haben keinen Ordner ausgewählt', 5)
    Exit
    EndIf
    GUICtrlSetData($c01, $sAuswahl)
    EndFunc

    [/autoit]
  • Moin Jan,

    lass dir mal in einer MsgBox() in Zeile 66 $sPfad und $sZiel1 ausgeben bzw. schreib dir die beiden Variablen in eine Logdatei.

    • Offizieller Beitrag

    Hallo,

    bei FileMove darf der Pfad nicht in Anführungszeichen eingeschlossen werden, der Befehl kommt auch so mit Leerzeichen im Pfad zurecht!

    [autoit]

    FileMove($sPfad, $sZiel1 & "\", 8)

    [/autoit]