dircopy bzw filecopy mit progressbar

  • Huhu, ich hab vor dircopy und filecopy mit progressbar zu benutzen, habdazu was gefundne:
    https://autoit.de/index.php?page…ssbar#post25989
    Und nun die frage wo muss ich und vorallem wie muss ich es reinschreiben wenn ich von dem Ordner in dem das script ausgeführt wird den unterordner xampplite mit allen daten und ordnern drin nach C:/lan kopieren möchte?
    Mfg Alex

    Einmal editiert, zuletzt von Alex2801 (13. Oktober 2009 um 20:47)

  • Hi,
    erstmal sorry ... was für ein Deutsch. :( ..... Komma ????

    Und zu deinem Problem.

    Spoiler anzeigen
    [autoit]

    CopyWithProgress($srcDir, $destDir)

    [/autoit]

    $srcDir = Quellverzeichnis
    $destDir = Zielverzeichnis

    Ein Tipp noch:
    Das Scriptverzeichnis steht in der Variable

    [autoit]

    @ScriptDir

    [/autoit]

    MfG
    Der_Doc

  • Hey, sorry für das da Oben, ich hatte vorhin keine Zeit mehr, deswegen sieht das so aus :)
    So ich habe es so:

    [autoit]

    Func CopyWithProgress($srcDir, $destDir)
    $srcDir = @ScriptDir & "\xampplite"
    $destDir = "C:\lan"
    If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
    If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
    If Not FileExists($destDir) Then DirCreate($destDir)
    $srcSize = DirGetSize($srcDir, 1)
    $1_percent = $srcSize[0] / 100
    Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y')
    ProgressOn("Advanced status of file copying", $1_percent & "%", "")
    Do
    $destSize = DirGetSize($destDir, 1)
    ProgressSet(Round($destSize[0] / $1_percent, 2), Round($destSize[0] / (1024 * 1024), 2) & " MB of " & Round($srcSize[0] / (1024 * 1024), 2)& " MB copied" & @CRLF _
    & $destSize[1] & " of " & $srcSize[1] & " Files copied." & @CRLF _
    & $destSize[2] & " of " & $srcSize[2] & " Folders copied.", Round($destSize[0] / $1_percent, 2) & "% - Done!")
    Sleep(200)
    Until $destSize[0] >= $srcSize[0]
    ProgressOff()
    EndFunc

    [/autoit]

    gibt dann folgendes aus:

    [autoit]

    C:\Users\Alex\projekte\Lanpartyhelper\rdy\installer.au3 (122) : ==> Variable used without being declared.:
    CopyWithProgress($srcDir, $destDir)
    CopyWithProgress(^ ERROR

    [/autoit]


    Mfg Alex

    Einmal editiert, zuletzt von Alex2801 (12. Oktober 2009 um 21:54)

  • Hallo Alex2801,

    du musst die Funktion mit Parametern aufrufen (so wie es dir Der_Doc bereits gepostet hat) z.B:

    Spoiler anzeigen
    [autoit]

    CopyWithProgress("C:\Programme\AutoIt3","c:\test") ;kopiert den kompletten AutoIt-Ordner nach c:\test

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

    #Include <Date.au3>
    Func CopyWithProgress($srcDir, $destDir) ;Original gigx siehe https://autoit.de/index.php?page…25989#post25989
    Local $tsBeginn = _NowCalc(), $tsDiff =-1, $tsRest ;eingefügt für Restdauer
    If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
    If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
    If Not FileExists($destDir) Then DirCreate($destDir)
    $srcSize = DirGetSize($srcDir, 1)
    $1_percent = $srcSize[0] / 100
    Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y /F /G')
    ProgressOn("Advanced status of file copying", "", "",10,10)
    Do
    if $tsDiff < 0 Then Sleep(5000)
    $destSize = DirGetSize($destDir, 1)
    $tsDiff = _DateDiff("s",$tsBeginn,_NowCalc())
    $tsRest = round($tsDiff / ($destSize[0] / $1_percent) * 100,0) - $tsDiff
    ConsoleWrite($tsDiff & " " & $1_percent & " " & $tsRest &@CRLF)
    ProgressSet(Round($destSize[0] / $1_percent, 2), Round($destSize[0] / (1024 * 1024), 2) & " MB of " & Round($srcSize[0] / (1024 * 1024), 2)& " MB copied" & @CRLF _
    & $destSize[1] & " of " & $srcSize[1] & " Files copied." & @CRLF _
    & $destSize[2] & " of " & $srcSize[2] & " Folders copied.", Round($destSize[0] / $1_percent, 2) & "% - Done! " & $tsRest & " sec. Rest")
    Sleep($tsDiff)
    Until $destSize[0] >= $srcSize[0]
    MsgBox(0,"Fertig in " & $tsDiff & " sec.",Round($destSize[0] / (1024 * 1024), 2) & " MB of " & Round($srcSize[0] / (1024 * 1024), 2)& " MB copied" & @CRLF _
    & $destSize[1] & " of " & $srcSize[1] & " Files copied." & @CRLF _
    & $destSize[2] & " of " & $srcSize[2] & " Folders copied." & @CRLF & Round($destSize[0] / $1_percent, 2) & "% - Done! ")
    ProgressOff()
    EndFunc

    [/autoit]

    zusätzlich habe ich in die Original-Func noch eine Voraussage der vermutlichen Restdauer eingebaut,

    mfg (Auto)Bert

  • ich bin mal so frei und habe es leicht mit 2 ordnerauswahl fenstern erweitert.

    Spoiler anzeigen
    [autoit]

    CopyWithProgress(FileSelectFolder("sourcedir", "",1),FileSelectFolder("destinationdir", "",1)) ;kopiert den kompletten AutoIt-Ordner nach c:\test

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

    #Include <Date.au3>
    Func CopyWithProgress($srcDir, $destDir) ;Original gigx siehe https://autoit.de/index.php?page…25989#post25989
    Local $tsBeginn = _NowCalc(), $tsDiff =-1, $tsRest ;eingefügt für Restdauer
    If StringRight($srcDir, 1) = "\" Then $srcDir = StringLeft($srcDir, StringLen($srcDir) - 1)
    If StringRight($destDir, 1) <> "\" Then $destDir = $destDir & "\"
    If Not FileExists($destDir) Then DirCreate($destDir)
    $srcSize = DirGetSize($srcDir, 1)
    $1_percent = $srcSize[0] / 100
    Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y /F /G')
    ProgressOn("Advanced status of file copying", "", "",10,10)
    Do
    if $tsDiff < 0 Then Sleep(5000)
    $destSize = DirGetSize($destDir, 1)
    $tsDiff = _DateDiff("s",$tsBeginn,_NowCalc())
    $tsRest = round($tsDiff / ($destSize[0] / $1_percent) * 100,0) - $tsDiff
    ConsoleWrite($tsDiff & " " & $1_percent & " " & $tsRest &@CRLF)
    ProgressSet(Round($destSize[0] / $1_percent, 2), Round($destSize[0] / (1024 * 1024), 2) & " MB of " & Round($srcSize[0] / (1024 * 1024), 2)& " MB copied" & @CRLF _
    & $destSize[1] & " of " & $srcSize[1] & " Files copied." & @CRLF _
    & $destSize[2] & " of " & $srcSize[2] & " Folders copied.", Round($destSize[0] / $1_percent, 2) & "% - Done! " & $tsRest & " sec. Rest")
    Sleep($tsDiff)
    Until $destSize[0] >= $srcSize[0]
    MsgBox(0,"Fertig in " & $tsDiff & " sec.",Round($destSize[0] / (1024 * 1024), 2) & " MB of " & Round($srcSize[0] / (1024 * 1024), 2)& " MB copied" & @CRLF _
    & $destSize[1] & " of " & $srcSize[1] & " Files copied." & @CRLF _
    & $destSize[2] & " of " & $srcSize[2] & " Folders copied." & @CRLF & Round($destSize[0] / $1_percent, 2) & "% - Done! ")
    ProgressOff()
    EndFunc

    [/autoit]

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

  • warum soll man nicht einfach mal etwas erweitern?
    ich nutze es ab jetzt und finde es sehr praktisch diese ordnerauswahl zu haben.
    davon abgesehen ist es doch wohl egal ob der thread gelöst ist oder nicht.
    muss man denn echt so engstirnig sein? ?(

    I spent 10 minutes reviewing code and thinking "What kind of drugs is this guy on?" before realizing it was something I wrote.

  • Stell dir vor, jeder würde so denken wie du und einfach gelöste Threads erneut hochholen.
    So würde ein einziges Chaos entstehen, da niemand mehr wüsste, wo noch Hilfe benötigt wird.
    Denk mal drüber nach ;)

    na da wo noch nicht gelöst ist. Die weit verbreitete Unsitte auch eigentlich gelöste Themen nicht auf gelöst zu setzen behindert die Hilfewilligen deutlich stärker.

    Maximus1: Bin aber auch der Meinung dass das Hinzufügen von 2 Funktionsaufrufen in einem Beispiel für einen Funktionsaufruf keine so grosse Änderung ist, das man dies extra ergänzen müsste, darauf sollte auch ein Anfänger von alleine kommen,

    mfg autoBert

  • aber ich habe mal ne Frage zu den XCopy -Parametern:

    Bei mir funktionierte die Funktion erst, als ich nen Haufen der Parameter entfernt hatte

    Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /Y /Q')
    (/Q = Quiet = dont display)

    /D = Date = neuere kopieren
    /S = kopiere nicht leere Unterverzeichnisse
    /E = kopiere auch leere Unterverzeichnisse
    /V = verify
    /C = continue copying on error
    /H = copies hidden
    /R = overwrite read only
    /O = copy ownership
    /Y = Yes = do not prompt

    klingt ja alles gut und richtig (ausser vielleicht /S & /E zusammen), aber wieso klappt das dann nicht ?

    Ich kopiere von lokal auf lokal und hab genug Rechte

    Jemand ne Idee ?

    Danke & Gruss

    Heisenberg