Gibt es schon ein skript mit dem mann dateien kopieren kann und dabei die Transferrate anzeigt ??
Mit Prozent kenne ich es schon, aber die Rate würde mich interesieren !
Gibt es schon ein skript mit dem mann dateien kopieren kann und dabei die Transferrate anzeigt ??
Mit Prozent kenne ich es schon, aber die Rate würde mich interesieren !
HI,
meinst du so wie im Total Commander? Reicht dir ggf. auch die verbleibende Zeit so, wie in Windows üblich?
So long,
Mega
es sollte schon die Transferrate anzeigen in KB/s !
Um das Thema noch mal aufzugreifen. Ist inzwischen schon so eine Methode aufgetaucht?
Xenobiologist
Die verbleibende Zeit würde aber auch reichen! (die Transferrate kann man ja dann daraus errechnen)
Hast du denn eine Lösung für die verbleibende Zeit??
Die Zeit sollte aber auch errchenet/angezeigt werden, wenn nur eine Datei kopiert wird!
Hast du, Xenobiologist, oder jemand anders eine Lösung??
mfg
Leo.1906
Mach es mit CopyFileEx http://msdn.microsoft.com/en-us/library/aa363852(VS.85).aspx
Prozent geht damit einfach, aber für Transferrate und Dauer muss du irgendwie mit TimerDiff was machen
Schon mal ein Anstoss, Transdauer kannst du ja selber noch hinzufügen.
[autoit]$sourcefile = "C:\Dokumente und Einstellungen\Tom\Eigene Dateien\Downloads\wr_installer_04082008.exe"
$destinationfile = @ScriptDir & "\test.exe"
ProgressOn ( "Copy....", "Copying file " & StringRegExpReplace ( $sourcefile, ".*\\(.*)\Z", "$1" ))
[/autoit][autoit][/autoit][autoit]$callback = DllCallbackRegister ( "Progress" , "int", "uint64;uint64;uint64;uint64;dword;dword;ptr;ptr;ptr")
$ptr = DllCallbackGetPtr ( $callback )
DllCall("kernel32.dll", "int", "CopyFileExA", "str" , $sourcefile , "str", $destinationfile, "ptr", $ptr , "ptr", 0, "int", 0, "int", 0)
ProgressOff ()
Func Progress($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
;~ ConsoleWrite ( $TotalBytesTransferred & @lf )
ProgressSet (round($TotalBytesTransferred/$TotalFileSize * 100, 0) , round($TotalBytesTransferred/$TotalFileSize * 100, 0) & "%")
[/autoit][autoit][/autoit][autoit]EndFunc
[/autoit]@ Tom99
Aber mit diesem Script kann man nur eine Datei kopieren. ich bräuchte das mit mehreren Dateien.
Was muss man denn dann da umschreiben?
mfg
Leo.1906
Du müßtest um alle eine For oder While schleife setzten, und dies
$sourcefile = "C:\Dokumente und Einstellungen\Tom\Eigene Dateien\Downloads\wr_installer_04082008.exe"
$destinationfile = @ScriptDir & "\test.exe"
durch ein Array ersetzen wo du Quell und Zielfile dann angibst.
MfG
Der_Doc
Zusatz von mir .... ich möchte auch das Arbeiten mir DLL´s verstehen, das fehlt mir noch bei Autoit.
MfG
Der_Doc
Hast recht mit deiner Lösung, aber dabei werden alle dateien nacheinander kopiert. Das is für mich nich das Problem. Das Problem ist, wenn man mehrere dateien Kopiert möchte ich für alle dateien zusammen ne Prozentangabe^^
Hast du da ne Ahnung, wie man das macht?
mfg
Leo.1906
Gibt es net vieleicht ne Funktion Filesize? Ich weis die gibt es unter PHP.
Nur mal so die Theorie. Sollte es die Funktion geben, über den Ordner laufen lassen und bei jedem kopiertem File die Größe
wieder abziehen. Ich hoffe ich bin verstanden worden
MfG
Der_Doc
@Tom99: Gibt es eine Möglichkeit den Kopiervorgang bei Deiner Routine abzubrechen?
Ich brauche nämlich auch gerade eine Multifile-Kopierfunktion und bin grad dabei, diese zu erstellen. Allerdings brauche ich die Möglichkeit, den Kopiervorgang abbrechen zu können.
Edit: siehe _MultiFileCopy in "Scripte"
Es geht, aber GuiGetMsg und so geht nicht. Die ganze GUI ist beim Kopieren blockiert
Kannst nur z.B. ESC abfragen:
#include <AVIConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <ProgressConstants.au3>
#include <StaticConstants.au3>
#include <GuiButton.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
#include <File.au3>
#include <Misc.au3>
; Gui taken from http://www.autoitscript.com/forum/index.ph…60&#entry576255
$sourcefile = "C:\WINDOWS\hidden.vol"
$destinationfile = @ScriptDir & "\vistape11-base.rar.copy"
FileDelete($destinationfile)
#Region ### START Koda GUI section ### Form=C:\Documents and Settings\Administrator\Bureaublad\Form1.kxf
$Form1 = GUICreate("Copying...", 356, 238, 193, 125, BitOR($WS_CAPTION,$WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS))
$Avi1 = GUICtrlCreateAvi(@SystemDir & "\shell32.dll", 160, 0, 0, 355, 56, BitOR($ACS_TRANSPARENT,$ACS_AUTOPLAY))
$Progress1 = GUICtrlCreateProgress(8, 64, 336, 17)
$Label1 = GUICtrlCreateLabel("From:", 8, 112, 36, 17)
$Label2 = GUICtrlCreateLabel("", 56, 112, 338, 25)
$Label3 = GUICtrlCreateLabel("Filecopy in progress...", 8, 88, 385, 17)
$Label4 = GUICtrlCreateLabel("To:", 8, 152, 36, 17)
$Label5 = GUICtrlCreateLabel("", 56, 151, 338, 25)
$Button1 = GUICtrlCreateButton("Cancel", 285, 216, 59, 17, 0)
;~ GUICtrlSetOnEvent(-1, "Button1Click")
$Label6 = GUICtrlCreateLabel("Approximately Remained Time:", 8, 184, 156, 17)
$Label7 = GUICtrlCreateLabel("", 176, 184, 217, 17)
$Label8 = GUICtrlCreateLabel("Already done:", 8, 208, 69, 17)
$Label9 = GUICtrlCreateLabel("", 88, 208, 190, 17)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;~ Sleep(10000)
;~ ProgressOn ( "Copy....", "Copying file " & StringRegExpReplace ( $sourcefile, ".*\\(.*)\Z", "$1" ))
$callback = DllCallbackRegister ( "Progress" , "int", "uint64;uint64;uint64;uint64;dword;dword;hwnd;hwnd;ptr")
$ptr = DllCallbackGetPtr ( $callback )
GUICtrlSetData($Label2,$sourcefile)
GUICtrlSetData($Label5,$destinationfile)
$Timer = TimerInit()
DllCall("kernel32.dll", "int", "CopyFileExA", "str" , $sourcefile , "str", $destinationfile, "ptr", $ptr , "ptr", 0, "int", 0, "int", 0)
;~ ProgressOff ()
Sleep(500)
GUIDelete()
Func Progress($TotalFileSize, $TotalBytesTransferred, $StreamSize, $StreamBytesTransferred, $dwStreamNumber, $dwCallbackReason, $hSourceFile, $hDestinationFile, $lpData)
;~ If GUIGetMsg() = $Button1 Then Return 1 ; Cancel Copying NICHT MIT GUIGetMSg arbeiten !!!, auch Sleeps nicht machen...
; Button State so verwenden :::
If BitAND(_GUICtrlButton_GetState(GUICtrlGetHandle($Button1)),$BST_PUSHED) = $BST_PUSHED Then Return 1
;~ If WinActive($Form1) And _IsPressed("1B") Then Return 1
Local $percDone = round($TotalBytesTransferred/$TotalFileSize * 100, 0)
GUICtrlSetData($Label9,$TotalBytesTransferred & " Bytes from " & $TotalFileSize)
GUICtrlSetData($Label7,Round((TimerDiff($Timer)/$percDone)*(100-$percDone)/1000,1) & "s") ; Millisekunden pro Prozent * RestProzent / 1000 ( damit Skeunden rauskommen )
GUICtrlSetData($Progress1,$percDone); , round($TotalBytesTransferred/$TotalFileSize * 100, 0) & "%")
EndFunc
[/autoit]Gibt es keine Möglichkeit den Kopierprozess von der GUI zu lösen? Kenne das nur von Unix mit "&" hinter dem Befehl wird die Console wieder freigegeben.
Aber ob es sowas unter Autoit gibt weis ich leider net.
MfG
Der_Doc
Nein, das geht leider nicht. Dafür bräuchtest du mehrere Threads. Allerdings gibt es doch im Eng. Forum so ne Multitasking-UDF. Und AdLib könnte auch gehen. Trotzdem bräuchtest du dafür eher OnEvent-Mode.
Freut mich wenn ich helfen konnte, AdLib ist mir auch so im Kopf rumgeschwirt.
MfG
Der_Doc