Kopieren des Temp Ordners in ein anderen Ordner mit Hilfe von DirCopy unter Windows 7

  • Hallo an Alle!

    Ich habe folgenes Problem und zwar möchte ich mit hilfe des Befehls DirCopy den Temp Ordner eine Kopie um Ziel ordner anlegen

    hier mal das was ich versucht habe doch der Ordner bleibt leer

    [autoit]

    ;das will nicht

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

    FileCopy("C:\Users\Baron\AppData\Local\Temp\*.*", "E:\hallo\")

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

    ; und das will auch nicht

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

    DirCopy(@TempDir, "E:\hallo", 1)

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

    ;auch wenn man denn ganzen pfard angibt geht es nicht

    [/autoit]

    wenn man es peer Maus Kopiert geht es, was ist das Problem das er den inhalt des temp Ordner nicht kopiert ?????? ?(

    Bitte um Hilfe


    Gruß Baron

  • DirCopy Funkioniert in anderen bereiche wie Beispiel : DirCopy("F:\Meine Bilder", "E:\hallo", 1) das geht 1A.

    warum kann ich vom Temp ordner diesen inhalt nicht nach E:\hallo Kopieren?????

    manuell geht es aber nicht peer Script dann bleibt der Ordner leer.


    Ich habe nach geschaut wegen Rechte sind alle ein Häckchen Drin ;(


    Bitte Bitte um Hilfe

    Gruß Baron

  • HI!

    Leider kann ich dir nicht weiterhelfen sondern nur deine Ausage zum teil bestätigen.
    Also wenn ich versuche unter Windows 7 vom Temp Dir des Benutzers Dateien zu kopieren, funktioniert dies bei denen die in keiner Weise "gesperrt" sind.
    Bis Dircopy auf so eine Datei trifft. Dann gibt er einen Fehler (0) aus und beendet das kopieren.
    Ich kenne leider keine Möglichkeit dem Dircopybefehl zu sagen, dass er beim Versuch so eine Datei zu kopieren, diese zu ignorieren und bei der nächsten weitermachen soll.

    Zitat

    wenn man es peer Maus Kopiert geht es


    Wenn man "manuell" kopiert kopiert Win7 mehrere solcher zum teil "gesperrter" Dateien. Komisch ist aber so.
    Datein die "wirklich" in Verwendung sind kopiert auch win7 nicht.

    Eventuell kannst du dir mit robocopy oder xcopy helfen. Denn diese können Fehler beim Kopieren ignorieren.

    LG
    Concara

    If not :?: then ?( else :thumbup:

  • Hallo Baron1977,

    versuh es einmal so:

    Spoiler anzeigen
    [autoit]

    CopyWithProgress("@TempDir, "E:\hallo") ;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]

    ist mithilfe von xcopy (ich glaube, dir schon einmal einen Link auf dieses Skript gegeben zu haben),

    mfg (Auto)Bert

    • Offizieller Beitrag

    Es scheint so, als wäre das ein Bug in DirCopy.

    Ich habe eben folgendes ausprobiert:

    [autoit]


    $ret = DirCopy('d:\temp\BluetoothBTW', 'e:\hallo', 1)
    ConsoleWrite($ret & @CRLF)

    [/autoit]


    Der Ordner "BluetoothBTW" existiert und in dem befindet sich ein weiterer Ordner namens "BTW_6.2.1.0100" und darin befinden sich dann noch mehrere Dateien und noch einige Ordner.
    Obiges Script liefert "1" zurück, aber im Verzeichnis "e:\hallo" wird nicht das Verzeichnis "BluetoothBTW" erstellt, sondern der Ordner "BTW_6.2.1.0100" und alle Dateien und Ordner, die sich in diesem befinden, werden kopiert.
    Edit: Dieser Teil stimmt nicht: Eine Datei, die sich direkt in "BluetoothBTW" befindet (Pfad: "d:\temp\BluetoothBTW\test.bmp") wird hingegen nicht kopiert. Das lag vermutlich an der späten Uhrzeit und meiner daher schon eingeschränkten Wahrnehmung. :sleeping:
    Nächster Test mit dem gleichen Pfad, dieses mal jedoch mit einem leeren Ordner "d:\temp\BluetoothBTW". Das Script liefert auch dieses mal eine "1" zurück, aber das Verzeichnis "BluetoothBTW" wird auch hier nicht im Zielverzeichnis erstellt.

    Ich habe absichtlich nicht @TempDir gewählt, um evtl. Berechtigungen auszuschließen. Das hat aber offensichtlich auch nichts damit zu tun, weil der Fehler ebenso unter WinXP auftritt.

    Getestest mit: "Win7, 64 Bit" und "WinXP, 32 Bit"
    AutoIt-Version: v3.3.4.0

    Vielleicht kann das mal jemand mit besseren Englischkenntnissen als Bugmeldung abgeben.

  • Hallo Oscar ,

    ich bin mir nicht sicher ob dies ein Bug oder ein Verständnisproblem ist. Wenn ich folgendes Skript ausfüfre:

    [autoit]

    $sSource = 'c:\programme\autoit3'
    $sDest = 'c:\test'
    $ret = DirCopy($sSource, 'c:\test', 1)
    ConsoleWrite($ret & @CRLF)

    [/autoit]

    werden alle Dateien und Ordner korrekt kopiert, der Ordner des Quellpfades (c:\programme\autoit3) wird allerdings nicht im Zielpfad angelegt sondern nur seine Dateien und Unterordner.

    Zitat

    Eine Datei, die sich direkt in "BluetoothBTW" befindet (Pfad: "d:\temp\BluetoothBTW\test.bmp") wird hingegen nicht kopiert.

    Dies tritt bei mir nicht auf,

    mfg (Auto)Bert

    • Offizieller Beitrag

    Ok, vielleicht Verständnisproblem, aber wenn ich den gesamten AutoIt-Ordner (wie in Deinem Beispiel) kopieren will, dann möchte ich doch auch den AutoIt-Ordner selbst als Verzeichnis im Zielverzeichnis haben.
    Ich bin mir jetzt nicht 100%ig sicher, aber war das in den alten AutoIt-Versionen nicht anders?

    Dann müsste man ja immer erst das Verzeichnis (Beispiel: AutoIt) im Zielverzeichnis erstellen. Für mich ist das irgendwie ein Widerspruch zu:

    Zitat

    If the destination directory structure doesn't exist, it will be created (if possible).

    Und wenn das Verzeichnis leer ist, wird es gar nicht kopiert/erstellt. Ich müsste also vorher feststellen, ob das Verzeichnis leer ist und es dann mit DirCreate erstellen. :(

    Bezüglich des kopierens der Datei in dem Ordner, siehe den Edit meines letzten Postings. :sleeping:

  • Hallo Oscar,

    der Fehler liegt meines Erachtens in der Beschreibung zu DirCopy:

    Zitat

    Copies a directory and all sub-directories and files (Similar to xcopy).

    Das von mir in #6 gepostete Beispiel von CopyWithProgress (Original gigx siehe https://autoit.de/index.php?page…25989#post25989) verwendet xcopy und das Ergebnis ist das gleiche, es werden alle Dateien und Unterordner des Quellpfades in den Zielpfad kopiert. Wenn ich bei beiden den Zielpfad um AutoIt3 erweitere wird auch dieser Ordner im Zielpfad angelegt. Die Beschreibung müsste also heissen:

    Zitat

    Copies all files and all sub-directories with files from the sourcepath into the destinationpath (Similar to xcopy).

    dann würde das Ergebnis mit der Bescheibung übereinstimmen,

    mfg (Auto)Bert

  • Erstmal danke AutoBert!

    Zitat

    ist mithilfe von xcopy (ich glaube, dir schon einmal einen Link auf dieses Skript gegeben zu haben),


    nein dieser Link kenn ich nicht da ich mir auch die sachen als pdf drucke.


    ich habe den befehl als batch erstellt und damit funkioniert es, er ladet mir denn ganzen temp inhalt zum ziel . die batch habe ich peer autoit mit editor erstellt danach das er automatisch speichert und ausführt.


    kann es sein wegen diese befehel : /D /S /E /V /C /H /R /O /Y /F /G ??????

    Gruß Baron

  • Hallo Baron1977,

    ...
    ich habe den befehl als batch erstellt und damit funkioniert es, er ladet mir denn ganzen temp inhalt zum ziel . die batch habe ich peer autoit mit editor erstellt danach das er automatisch speichert und ausführt.


    warum gehst du den Umweg über eine Batch, falls es wegen dem sichtbaren cmd-Fenster ist, dass kann man auch vemeiden in dem man CopyWithProgress wie folgt abändert:

    [autoit]

    ;Zeile 10
    Run('XCOPY "'& $srcDir & '" "' & $destDir & '" /D /S /E /V /C /H /R /O /Y /F /G',@ScriptDir,@SW_HIDE )

    [/autoit]
    Zitat

    kann es sein wegen diese befehel : /D /S /E /V /C /H /R /O /Y /F /G ??????

    :?: aber hier die Bedeutung der gesetzten Parameter für den XCOPY-Befehl

    mfg (Auto)Bert

  • Hallo AutoBert! ^^

    1. Ich habe den umweg deshalb gemacht weil das Script bei 99,9 Prozent Sich aufgehangen hat .

    2. Ja das werde auch noch gut gewesen das dieses Fenster nicht erscheind.


    3. im Script wahr ein Kleiner Fehler am anfang das Gänse füßchen vor @TempDir aber ist nicht schlimm habe ich geandert das kann jeden Passieren und auch bei mir

    [autoit]

    CopyWithProgress( "@TempDir, "E:\hallo")

    [/autoit]

    Würde Echt besser Sein deine Variante da mein vor haben komplett ein umweg macht.


    MfG

    Baron