DirMove - Verzeichnis verschieben

  • Hallo,

    wie verschiebe ich folgendes (ergibt derzeit Fehler 0, laut Hilfe: wenn das Verschieben des Ordners fehlschlug.):

    Der Inhalt von "R:\0 - Kopie\02\02" soll nach "R:\0 - Kopie\02" verschoben werden.


    $Start = "R:\0 - Kopie\02\02"
    $Ziel = "R:\0 - Kopie\02"
    DirMove ($Start, $Ziel, 1)

    Hingegen funktioniert:

    $Start = "R:\0 - Kopie\02\02"
    $Ziel = "R:\0 - Kopie\04"
    DirMove ($Start, $Ziel, 1)

    Danke und ein erfreuliches Wochenende :)

    PS:
    Ziel des Ganzen: Mehrfach verschachtelte Verzeichnisse werden solange 1 Ebene nach oben verschoben, bis im Zielverzeichnis mehr als 1 Element (mehr als 1 Datei oder 1 Verzeichnis) ist.
    Es kommt häufiger vor, dass bei mehrfach verschachtelten Verzeichnissen Unterverzeichnisse mit gleichem Namen vorhanden sind - wie z.B. in "R:\0 - Kopie\02\02".

    3 Mal editiert, zuletzt von AutoMit (20. Januar 2017 um 17:41)

  • Würd ich auch mal vermuten. Wenn man das manuell im Explorer macht erhält man diese Meldung

    doppelter_ordner.png

    Per commandline erscheint diese Rückfrage

    Seltsamerweise erhalte ich per CMD ein "Zugriff verweigert" wenn ich dem Überschreiben zustimme oder dieses per Parameter /Y erzwinge.

    Du könntest mal in der Hilfe nachsehen ob die dirmove Funktion ebenfalls einen Parameter für Überschreiben besitzt.


    Als Workaround kann natürlich auch immer zuerst ein "02temp" als Ziel verwendet werden, danach das leere "02" löschen und dann "02temp" nach "02" umbenennen/verschieben.

    3 Mal editiert, zuletzt von misterspeed (20. Januar 2017 um 21:29)

  • Remarks
    If the source and destination are on different volumes or UNC paths are used then a copy/delete operation will be performed rather than a move.

    If the destination already exists and the overwrite flag is specified then the source directory will be moved inside the destination.

    Da wird man dann wohl nicht um ein temporäres Verzeichnis herumkommen...

    Ich habe das gerade mal so getestet:

    MoveDir
  • Danke Bitnugger für den Workaround :)

    Dafür ist doch hinten die ,1 gedacht. Das setzt den Flag für $FC_OVERWRITE. Trotz Adminrechte ersetzt er die Dateien dennoch nicht.

    Ich hatte auch die Hoffnung, dass es überschrieben wird mit Flag = 1, daher in meinem ersten Post:
    DirMove ($Start, $Ziel, 1)
    Geht leider wirklich nicht.

    Im Total Commander funktioniert das ohne Probleme - es kommt keine Überschreibwarnung - F6 und der Inhalt des gleichnamigen Verzeichnisses ist eine Ordnerebene höher.
    So eine Funktion (API Aufruf?) suche ich für AutoIt, die einfach aufgerufen werden kann. Bis dahin versuche ich es mit dem Workaround und dem temp Verzeichnis.

    DirMove
    laut Hilfe
    "Wenn der Zielort schon existiert, und bei "flag" angegeben wird, dass überschrieben werden soll, so wird das Quellverzeichnis in das Zielverzeichnis verschoben."

    Das funktioniert scheinbar nicht, wie in der Hilfe beschrieben - oder verstehe ich die Beschreibung falsch?
    Wie ist der Satz aus der Hilfe zu verstehen?

    Einmal editiert, zuletzt von AutoMit (21. Januar 2017 um 13:31)

  • Remarks
    If the source and destination are on different volumes or UNC paths are used then a copy/delete operation will be performed rather than a move.

    If the destination already exists and the overwrite flag is specified then the source directory will be moved inside the destination.

    Da wird man dann wohl nicht um ein temporäres Verzeichnis herumkommen...

    Ich habe das gerade mal so getestet:

    MoveDir


    Wie kann man das Script von Bitnugger erweitern, damit nur Verzeichnisse berücksichtigt werden?

    If $aFileList[0] > 0 Then ... bedeutet wohl, nur Dateien werden verschoben.

    Mein Ziel ist es, dass der Inhalt gleichnamiger Verzeichnisse verschoben wird.

    Verschoben werden sollen nur Verzeichnisse inklusive der Dateien (nicht einzelne Dateien, daher habe ich es mit DirMove versucht)


    So soll das Ergebnis aussehen


    R:\0 - Kopie\02\02\Test -> R:\0 - Kopie\02\Test

    Quelle:

    R:\0 - Kopie\02\02\Test\Dummy_1.txt
    R:\0 - Kopie\02\02\Test\Dummy_2.txt
    R:\0 - Kopie\02\02\Test\Dummy_3.txt

    Ergebnis:

    R:\0 - Kopie\02\Test\Dummy_1.txt
    R:\0 - Kopie\02\Test\Dummy_2.txt
    R:\0 - Kopie\02\Test\Dummy_3.txt

    Ein schönes Wochenende und Danke :)

  • Wie kann man das Script von Bitnugger erweitern, damit nur Verzeichnisse berücksichtigt werden?

    MoveDir
  • Vielen Dank Bitnugger für die Ergänzung und Deine Hilfe :)

    Ich lasse das Thema noch offen. Vielleicht kann jemand noch etwas zu den Fragen aus Post 7 schreiben.

    Ein schönes Wochenende und Gute Nacht.