1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. AnnaM

Beiträge von AnnaM

  • Kopiervorgang mit Prozentangabe und Dateien

    • AnnaM
    • 18. September 2011 um 10:43

    Vielleicht gibt es noch jemanden, der eine idee oder ein gutes Script zur Umsetzung hat...

  • Kopiervorgang mit Prozentangabe und Dateien

    • AnnaM
    • 17. September 2011 um 15:17

    Hallo DevFly,

    danke für deinen Beitrag.
    Ich habe die INI erstellt, da manche Umgebungsvariablen nicht für alle Betriebssysteme gelten und man bei einem Registryeintrag nicht einfach das Programm und die zugehörigen Ordner löschen kann. Folglich müsste ich noch eine Deinstallation schreiben. Und so habe ich auch die Möglichkeit die INI schnell und unkompliziert zu editieren. :) Also werde ich das wohl erst einmal mit der INI weiter machen. Trotzdem ein netter Vorschlag. Danke.

  • Kopiervorgang mit Prozentangabe und Dateien

    • AnnaM
    • 17. September 2011 um 13:03

    Hallo Zusammen,

    ich habe eine Frage, wie ich einen Kopiervorgang angehe:

    Mein Vorhaben bzw. Ziel:
    Ich möchte gerne einen Ordner in ein Ziel kopieren. _copy("C:\test\quelle\","C:\test\ziel\")
    Die bereits vorhanden Dateien bzw. Ordner dürfen nur überschrieben werden, wenn die Quelle neuer ist.
    Es muss eine Prozentangabe und ein Prozessbalken geben.
    Extra: Man sieht, welche Datei gerade kopiert wird
    Extra: Man sieht die Kopiergeschwindigkeit
    Extra: Man sieht die noch verbleibende Zeit

    Folgende Sachen habe ich bereits ausprobiert:

    Spoiler anzeigen
    [autoit]


    $winShell = ObjCreate("shell.application")
    $winShell.namespace($ziel).CopyHere($quelle,$FOF_SIMPLEPROGRESS)

    [/autoit]


    Leider weiß ich hier nicht, wie ich sagen kann, dass nur neuere Dateien kopiert werden sollen.
    (wäre aber mal nützlich zu wissen, wenn einer Ahnung davon hat ^^)
    Außerdem ist es ungeeignet, da ich eine eigene GUI erzeugen möchte, wo es einen Prozessbalken gibt :)

    --------------------------------------------------------------------------------------------------------

    Spoiler anzeigen
    [autoit]


    $callback = DllCallbackRegister ( "Progress" , "int", "uint64;uint64;uint64;uint64;dword;dword;hwnd;hwnd;ptr")
    $ptr = DllCallbackGetPtr ( $callback )

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

    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

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

    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) & "%")

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

    EndFunc

    [/autoit]


    Hier habe ich das Problem, dass ich bis jetzt nur Datei zu Datei und nicht Ordner zu Ordner übertragen kann... aber wir kommen der Sache näher :)

    ---------------------------------------------------------------------------------------------------------

    Nun kommt das Programm aus diesem Forum. Ich glaube Oscar hat es geschrieben:
    https://autoit.de/index.php?page=Thread&threadID=7923
    Hier stellt sich die Frage, wie ich es umschreiben kann bzw. meine Anforderungen damit realisieren kann.
    Bis jetzt habe ich lediglich die INI-Datei fertig geschrieben. Sie sieht so aus:

    Spoiler anzeigen
    Code
    [Einzelne Programme]
    FileZilla = C:\Users\Anna\Anwendungsdaten\FileZilla
    Trillian = C:\Program Files (x86)\Trillian
    Webentwicklung = E:\Webentwicklung
    Spiele = E:\Spiele
    Fonts = C:\Windows\Fonts
    Windows Sidebar = C:\Users\Anna\AppData\Local\Microsoft\Windows Sidebar
    
    
    [Firefox]
    FF-Hauptverzeichniss = C:\Program Files (x86)\Mozilla Firefox
    FF-Anwendungsdaten = C:\Users\Anna\Anwendungsdaten\Mozilla
    
    
    [Thunderbird]
    TB-Hauptverzeichniss = C:\Program Files (x86)\Mozilla Thunderbird
    TB-Anwendungsdaten = C:\Users\Anna\Anwendungsdaten\Thunderbird
    Alles anzeigen


    Somit liest das Script die einzelnen Pfade ein und führt ein Backup aus.
    Das Problem werden die Anzeigen mit einem Prozessbalken. Da müsste man Zwei haben.
    Aber ich weiß leider nicht, wie ich sowas realisieren kann :(
    Zudem habe ich ja meine eigene GUI, wo es Prozessbalken und Anzeigefelder für die Zeit und so geben wird (noch nicht erstellt)
    Und das Script legt mir eine Datei in das Verzeichnis, welche ich nicht haben möchte, bzw. brauche, da das Verzeichnis sich immer ändert.

    Ich hoffe, man kann mir helfen... Vielen Dank im Voraus erst einmal... die Anna

  • Taskleiste Status

    • AnnaM
    • 11. September 2011 um 15:18

    Boar, supi.. dankeschön :)

  • Taskleiste Status

    • AnnaM
    • 11. September 2011 um 14:00

    Hallo James,

    aber ich habe 2 Progress-Bars und da macht der das nicht :(

    Auch beim Auto-It-Beispiel in der Hilfe, macht der keine Füllung des Tasksymbols :(

  • Taskleiste Status

    • AnnaM
    • 11. September 2011 um 13:07

    Hallo Zusammen,

    bei einer Installation von einem Programm oder rendern von einem Video sieht man es häufiger.
    In der Taskleiste wird das Programm als Symbol abgebildet und ab Windows 7 füllt es sich grün, je höher der Installations - oder Downloadfortschritt voran geschritten ist.

    Ist dieses auch mit Autoit möglich?

    Wer es nicht kennt, einfach mal unter Win7 ein Video mit dem WindowsMovieMaker rendern oder bei Steam ein Spiel updaten oder runterladen :)

    Ich hoffe, ihr habt Tipps, wie man diese Fortschrittsanzeige umsetzen kann.

    Vielen Dank und liebe Grüße :*

  • CMD Robocopy

    • AnnaM
    • 7. August 2011 um 16:34

    Keiner eine Idee? :( *schnüff* ;(

  • CMD Robocopy

    • AnnaM
    • 6. August 2011 um 14:34

    Hallo AspirinJunkie,

    da bin ich wieder :)

    Ich habe deinen Code ausgiebig getestet und mir ist aufgefallen, dass er manchmal Fehler macht.
    Zum Beispiel bewegt sich der aktuelle Fortschrittsbalken, auch wenn unten steht "suche...".
    Das kann doch nicht sein, oder? Hier einmal mein Code:

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

    _GUICtrlStatusBar_SetText($StatusBar, "suche...1")

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

    $iPID = Run('Robocopy "' & $quelle & '" "' & $ziel & '" ' & $sync, @SystemDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)

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


    If @error Then Return MsgBox(0,"Fehler", "Fehlercode: " & @error & @CRLF & "PID: " & $iPID)

    While 1
    $sline = StdoutRead($iPID)
    If @error Then ExitLoop

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

    If $sline <> '' Then
    #region Dateiname und Größe ermitteln
    $aRegExp = StringRegExp($sline, '(?m)^\s+(New File|Newer|Neuer|Neue Datei|Älter|Older)\s+([\d\.]+?)\s?([mg]?)\t([^\n\r]+?)$', 4)
    If Not @error Then
    $a_Temp = $aRegExp[0]
    $sFile = $a_Temp[4]

    Switch $a_Temp[1]
    Case 'New File', 'Neue Datei'
    _GUICtrlStatusBar_SetText($StatusBar, "Kopiere: '" & $sFile & "'")
    Case 'Newer', 'Neuer'
    _GUICtrlStatusBar_SetText($StatusBar, "Aktualisiere: '" & $sFile & "'")
    Case Else
    _GUICtrlStatusBar_SetText($StatusBar, "suche...2")
    GUICtrlSetData($Progress_Update_detail, 0)
    EndSwitch


    EndIf

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

    #region Fortschritt ermitteln
    $aRegExp = StringRegExp($sline, '(?m)^\s*([\d\.]+)%\s*?$', 3)
    If Not @error Then
    $iFort = Number($aRegExp[0])
    If $iFort <> $iFortold Then
    $iFortold = $iFort
    GUICtrlSetData($Progress_Update_detail, $iFort)
    EndIf
    If $iFort = 100 Then
    _GUICtrlStatusBar_SetText($StatusBar, "suche...3")
    GUICtrlSetData($Progress_Update_detail, 0)
    EndIf

    EndIf
    #endregion Fortschritt ermitteln
    EndIf
    Sleep(1)
    WEnd

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

    Ich habe einmal das Aufgeteilt mit "suche1", "suche2" und "suche3" und es passiert manchmal bei ganz neueren Dateien, dass er einfach ab "If Not @error Then" den Code überspringt. Er zeitg also nichts mehr an, ob er sucht oder aktualisiert und macht trotzdem einen Fortschrittsbalken. ?( Hoffe du kannst mir da helfen :(

    Edit: Dabei ist "$Progress_Update_detail" mein Fortschrittsbalken in Prozent und "$StatusBar" meine Anzeige. ^^

  • CMD Robocopy

    • AnnaM
    • 4. Juli 2011 um 10:04

    Ja, funzt super.. Danke an euch alles :) Auf ein baldiges Wiedersehen *gg*

  • CMD Robocopy

    • AnnaM
    • 3. Juli 2011 um 21:28

    Ja, aber wie mache ich das? Wie füge ich in dem Case etwas hinzu? war das richtig, was ich gesagt habe? Nach meinem Test hat es nicht viel gebracht.
    Der hat das einfach ignoriert. Wo füge ich den Code zum Zurücksetzen am Besten ein?

    P.S.: Ich habe die Erfahrung gemacht, dass wenn ich Robocopy mit den Parametern /NS /NC /NDL /NJH aufrufe, also ohne jegliche Doku,
    Robocopy 70% schneller war. Vielleicht lag es auch daran, dass der soviel auflisten musste in der CMD. hmm ?(

  • CMD Robocopy

    • AnnaM
    • 3. Juli 2011 um 20:59

    Hallo Danke an Euch allen :) *thumbsup*

    Ich habe noch eine Frage an "AspirinJunkie". Bei deinem Code passiert es manchmal, dass eine Datei kopiert oder aktualisiert wird ... soweit so gut :)
    Aber passiert dieses am Anfang des Backups, wird es hingeschrieben "Kopiere Dateixy". Wird nun im Verlauf des Backups keine weiteren Dateien mehr aktualisiert oder erneuert bzw. hinzugefügt,
    bleibt der Text die ganze Zeit stehen bis zum Ende des Backups.

    Kann man da nicht ein
    Case Else einfügen oder so? Einfach dann einen Statustext "searching..." einblenden? Ansonsten läuft dein Code super. :)
    Noch eine Frage, ist der Code dann eigentlich sehr langsam, wenn der alles Auswerten muss?

    Gruß,

  • CMD Robocopy

    • AnnaM
    • 3. Juli 2011 um 19:36

    uii. so viele Informationen :) Ich probiere dann mal meine Version aus und schicke es euch dann. Hoffe, ich schaffe das heute abend noch :)

    Danks schon einmal vielmals,

  • CMD Robocopy

    • AnnaM
    • 3. Juli 2011 um 18:00

    Theoretisch kann man mit Autoit den kompletten Pfad selber durchgehen und dann die Dateien einzeln mit Robocopy kopieren. Dann hätte man die Dateien, die er gerade kopiert.
    Aber dann könnte man sich den Robycopy sparen :) Und ich glaueb auch, dass Robocopy mit threads arbeitet. Das wäre dann auch weg und es wäre langsamer ... *ggggg* :)

    ja, ich bin gespannt, was du mir schönes strickst ^^


    P.S.: Wenn man überprüft, ob der Prozess noch läuft, könnte man ausversehen den falschen cmd.exe meinen. Also d.h. wenn der User eine andere Konsole gerade schließt meint Autoit, Robocopy hat die geschlossen ^^
    Aber ich glaube, wenn man den runwait Befehl ausführt, den ich oben hingeschrieben habe, heißt der Prozess "Robocopy.exe". Das wäre schon besser. *gg* :thumbup:

  • CMD Robocopy

    • AnnaM
    • 3. Juli 2011 um 17:55

    Naja, wenn ich es so aufrufe, was du einmal gerne bei dir auf probieren kannst, gibt es mir pro Zeile die Datei an, die er gerade bearbeitet und dann kommt am Schluss eine Zusammenfassung, die man glaube ich auch mit Attributen ausschalten kann. Aber mehr weiß ich nun auch nicht. Ob uns das hilft? *ggg*

  • CMD Robocopy

    • AnnaM
    • 3. Juli 2011 um 17:46

    Achso, verstehe. Autoit wartet so lange, bis das cmd geschlossen wird. hmmm. Kann man das nicht manuell abfragen und prüfen, ob ein cmd geschlossen ist und fertig ist? oder geht das wiederum nicht? Explizit robocopy hat doch verschiedene Endstadien. bzw. cmd wird ja geschlossen, wenn robocopy fertig ist, oder nicht? ohnein, alles ist wieder sooooo kompliziert. :-/

    Es kommen 4 weitere Ordner bei mir hinzu mit dem gleichen Befehl.
    Ich stelle mir das dann so vor:

    robocopy geht los

    abfrage, ob robocopy noch läuft, wenn nicht, dann

    robocopy geht los

    usw...

  • CMD Robocopy

    • AnnaM
    • 3. Juli 2011 um 17:41

    Hallo "name22",

    leider brauche ich runwait für die Zeile, weil danach erst das Programm weiter gehen soll. :( Tut mir Leid ....

  • CMD Robocopy

    • AnnaM
    • 3. Juli 2011 um 17:24

    hallo Zusammen,

    ich habe eine Frage und hoffe auf Hilfe. Ich hoffe auch, dass man dieses lösen kann.

    Ich habe ein Tool geschrieben, welches ganz banal einen Ordner in einen anderen Ordner kopiert.
    Dieses mit Hilfe von Robocopy.

    Hier der Befehl:

    $rob = RunWait("robocopy " & chr(34) & $quelle &chr(34) & " " & chr(34) & $ziel & chr(34) & " /MIR /R:3 /W:10", "" ,@SW_HIDE)

    Nun läuft alles super :)

    Nun meine Frage: Kann ich nun abfragen, was der liebe Robocopy gerade für eine Datei in der Hand hält und bearbeitet?
    Ich stelle mir das in meiner GUI folgendermaßen vor: Ich habe ein Textfeld und da drin wird immer reingeschrieben,
    welche Datei oder Ordner der gerade behandelt. Zum Beispiel "Kopiere gerade: autoit.exe" usw.

    Ginge das? Das wäre super hilfreich.

    Vielen Dank schonmal im Voraus,


    P.S: Ich habe mir auch schon die Funktion StdoutRead durchgelsen, aber habe keine Ahnung, wie ich so etwas in meinem Fall benutzen kann oder muss. ;(

  • mySQL Datumsformat

    • AnnaM
    • 27. Mai 2011 um 18:00

    Naja, oder auch so :D

  • Variablen werden nicht in eine INI gespeichert?!

    • AnnaM
    • 27. Mai 2011 um 17:58

    Hallo Lottich,

    es könnte daran liegen, dass deine $read*-Variablen nicht global sind. Das heißt, die können in einer anderen Funktion gar nicht ausgelesen werden.
    Setze doch zum Test oben am Programmanfang "Global $read1" und schau, obs klappt.

  • mySQL Datumsformat

    • AnnaM
    • 27. Mai 2011 um 17:51

    Hallo Cash,

    schonmal "_DateTimeFormat" bzw "_DateTimeSplit" ausprobiert?

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™