armin1893
Goto Top

Files aus Unterordner in drüberliegenden Orner verschieben

Hallo zusammen,

Meine Ordnerstruktur sieht folgendermaßen aus :

Ordner1\frame1\file1.xxx
file2.xxx
file3.xxx
Ordner2\frame1\file1.xxx
file2.xxx
file3.xxx
Ordner3\frame1\file1.xxx
file2.xxx
file3.xxx

Diese Files sollen möglichst per Batch einfach in den jeweils darüberliegenden Ordner verschoben werden.

Hab leider keinen Plan, wäre für jede Hilfe dankbar.

Im Voraus besten Dank.

Grüsse - Armin

Content-ID: 189564

Url: https://administrator.de/contentid/189564

Ausgedruckt am: 23.11.2024 um 00:11 Uhr

bastla
bastla 14.08.2012 aktualisiert um 11:07:02 Uhr
Goto Top
Hallo Armin1893!

Nur zur Sicherheit: Die "file1.xxx" sollen in die "frame1"-Ordner und auch die "file2.xxx" und "file3.xxx" sollen eine Ordnerebene höher [Edit2] (oder liegen die ohnehin auch in "frame1" - dann würde sich die Problemstellung ja auf "verschiebe alle Dateien aus dem jeweiligen Unterordner "frame1" eine Ordnerebene nach oben" reduzieren) [/Edit2]?

[Edit] Hinsichtlich "file2.xxx" und "file3.xxx" würde es zB beim Verschieben aus "Ordner2" zu einer Namenskollisionen kommen, da ja schon die gleichnamigen Dateien aus "Ordner1" vorhanden wären - was sollte dann passieren?

Und: Gibt es nur die genannten Dateien, bzw sollen alle gefundenen Dateien verschoben werden? [/Edit]

Grüße
bastla
der-blob
der-blob 14.08.2012 um 11:17:07 Uhr
Goto Top
Hallöchen, also ich habe ihn so verstanden das aus:

Ordner1\frame1\*.* --> Ordner1\*.* werden sollen.

Deshalb würde es (soweit ich es sehen kann) zu keiner kollision kommen, nur wenn noch ein weiter Ordner Ordner1\frame2\ wär, und in diesem die selbe benamung wie frame1 wär.


also ich hätte dies im Angebot.. Es werden ALLE dateien welche in Frame1 liegen nach Ordner1/2/3.... verschoben.

@echo off
setlocal enabledelayedexpansion
cd /d %~dp0
set ausgang=%cd%

for /f %%a in ('dir /b /a:d') do (  
set NachOrdner=%ausgang%\%%a

for /f %%i in ('dir !NachOrdner! /b /a:d') do (  
set VonOrdner=!NachOrdner!\%%i
echo move !VonOrdner!\*.* !NachOrdner!
echo rd !VonOrdner! 

)
)
(das Script liegt dort wo Ordner1 Ordner2... liegen.)
bastla
bastla 14.08.2012 aktualisiert um 11:53:14 Uhr
Goto Top
@der-blob

Wenn ich das auch so ähnlich interpretiere (und inzwischen tendiere ich dazu), würde ich aber einfach direkt in CMD
for /d  %i in ("D:\Ausgangsordner\Ordner*") do move "%i\frame1\*.xxx" "%i\"
bzw für alle Unterordner von "D:\Ausgangsordner"
for /d  %i in ("D:\Ausgangsordner\*") do move "%i\frame1\*.xxx" "%i\"
verwenden ...

Grüße
bastla
Armin1893
Armin1893 16.08.2012 um 10:47:51 Uhr
Goto Top
Hallo bastla und der-blob,

komm erst jetzt dazu zu antworten, herzlichen Dank für Eure schnelle und präzise Antworten.
Unglaublich, was man mit Eurem Wissen alles machen kann. Funktioniert suppperrrr......

Ergänzende Frage : zum besseren Verständnis würde gerne die Syntax verstehen. Wo kann ich das evtl. nachlesen ?

Danke nochmal, Ihr seid dir Größten !!!

Grüße - Armin
Armin1893
Armin1893 16.08.2012 um 10:56:11 Uhr
Goto Top
Hallo nochmal,

ein kleines Problem hab ich noch face-wink

Wenn ein Ordner ein Leerzeichen enthält, funktionerts leider nicht. Gibt bestimmt auch dafür ne Lösung, oder...

Grüasle - Armin

Beispiel :

ORDNER1/FRAME1 funktionert
ORDNER2/FRAME1 funktionert
ORDNER 3/FRAME1 funktionert nicht !!!
ORDNER4/FRAME1 funktionert
bastla
bastla 16.08.2012 aktualisiert um 11:31:37 Uhr
Goto Top
Hallo Armin1893!
Wenn ein Ordner ein Leerzeichen enthält, funktionerts leider nicht
Kann sich eigentlich nur auf die Version von der-blob beziehen - versuch es mit dieser Fassung davon:
@echo off
setlocal enabledelayedexpansion
cd /d "%~dp0"  
set "ausgang=%cd%"  

for /f "delims=" %%a in ('dir /b /a:d') do (  
    set "NachOrdner=%ausgang%\%%a"  

    for /f "delims=" %%i in ('dir "!NachOrdner!" /b /a:d') do (  
        set "VonOrdner=!NachOrdner!\%%i"  
        echo move "!VonOrdner!\*.*" "!NachOrdner!"  
        echo rd "!VonOrdner!"  

    )
)
Zur Erklärung meines Ansatzes:
Mit der "for /d"-Schleife werden alle Ordner, die dem Suchmuster ("D:\Ausgangsordner\Ordner*") entsprechen, durchlaufen und deren Pfad jeweils in "%i" zur Verfügung gestellt - damit kann dann der Befehl
move "%i\frame1\*.xxx" "%i"
also:Verschiebe alle *.xxx-Dateien des Unterordners "frame1" von "%%i" nach "%%i" für jeden gefundenen Ordner durchgeführt werden ...

Grüße
bastla
Armin1893
Armin1893 16.08.2012 um 12:04:27 Uhr
Goto Top
Hallo bastla,

hast natürlich recht, bezog sich auf den Ansatz von der-blob.

Deine Fassung funktioniert jetzt auch bei Ordnern mit Leerzeichen.

Ganz herzlichen Dank für die schnelle Antwort und deine ergänzende Erklärung des Ansatzes. Damit verstehs auch ich ein wenig.

Danke + Grüsse
Armin