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
dircopy bzw filecopy mit progressbar
-
- [ gelöst ]
-
Alex2801 -
12. Oktober 2009 um 18:13 -
Geschlossen -
Erledigt
-
-
Hi,
erstmal sorry ... was für ein Deutsch. ..... Komma ????Und zu deinem Problem.
Spoiler anzeigen
[autoit]CopyWithProgress($srcDir, $destDir)
[/autoit]$srcDir = Quellverzeichnis
$destDir = ZielverzeichnisEin Tipp noch:
[autoit]
Das Scriptverzeichnis steht in der Variable@ScriptDir
[/autoit]MfG
Der_Doc -
Hey, sorry für das da Oben, ich hatte vorhin keine Zeit mehr, deswegen sieht das so aus
[autoit]
So ich habe es so:Func CopyWithProgress($srcDir, $destDir)
[/autoit]
$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()
EndFuncgibt dann folgendes aus:
[autoit]C:\Users\Alex\projekte\Lanpartyhelper\rdy\installer.au3 (122) : ==> Variable used without being declared.:
[/autoit]
CopyWithProgress($srcDir, $destDir)
CopyWithProgress(^ ERROR
Mfg Alex -
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>
[/autoit]
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()
EndFunczusätzlich habe ich in die Original-Func noch eine Voraussage der vermutlichen Restdauer eingebaut,
mfg (Auto)Bert
-
Hi,
ist net schlimme Alex2801 habe auch manchmal einen schlechten Tag@ AutoBert
wie errechnet sich denn die "Restdauer"?
Kannst du nun auch hellsehen???MfG
Der_Doc -
Hey, danke für die Erklärung
Funktioniert nun wunderbar
Mfg Alex -
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>
[/autoit]
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 -
Leichenschänder! Der Thread war doch schon längst gelöst, und FileSelectFolder als Parameter einfügen kann ich auch .
-
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? -
muss man denn echt so engstirnig sein?
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 -
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 nachna 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 promptklingt 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