ghostrider1911
Goto Top

Batch Datei zum verschieben von Dateien aus Unterordnern ?

Hallo,

ich bräuchte eine Batch Datei die Dateien aus Unterordnern verschiebt.

Also ich habe folgende Verzeichniss Struktur:

Z:\Dateien\Ordner1\M1\
Z:\Dateien\Ordnärx\M1\

Alle Dateien aus dem Ordner M1 sollen jeweils in den Ordner1 Ordnärx etc... verschoben werden.

Schwierigkeit dabei: Es soll automatisiert gehen, da von Ordner1 Ordnärx 400 Stück existieren.

C:\Users\elektro04>for /d %i in ("Z:\Dateien\Ordner1\*.*") do move "%i\*.*" "Z:\Dateien\Ordner1\"

Dieses Skript funktioniert bereits in der CMD, aber ich müsste jedesmal den den Namen des Ordner1 ändern, und das ist mir bei 400 Ordnern echt zu langwierig.

(Das Skript hab ich ergoogelt, ich selbst habe wenig Ahnung vom cmd, grundkenntnisse sind aber vorhanden)

Ach ja: Die Ordnernamen enthalten Sonderzeichen, Umlaute, Leerzeichen, und das Verzeichniss liegt auf einem NAS

Für eure Hilfe währe ich dankbar!

Mfg

Content-Key: 302448

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

Printed on: April 16, 2024 at 21:04 o'clock

Member: beidermachtvongreyscull
beidermachtvongreyscull Apr 21, 2016 updated at 06:58:37 (UTC)
Goto Top
@ECHO OFF
cd \Dein-oberer-Ordner
for /f "tokens=*" %%f in ('dir /a:-D /s /b') do move "%%f" Zielpfad  

Erst testen vor Produktivnahme!
Member: Ghostrider1911
Ghostrider1911 Apr 21, 2016 updated at 10:50:30 (UTC)
Goto Top
Hallo,

Ich habe das Skript geteset, leider schiebt es mir alle Dateien aus den Unterordner einfach in das Hauptverzeichniss.

@ECHO OFF 
cd \C:\Test
for /f "tokens=*" %%f in ('dir /a:-D /s /b') do move "%%f" C:\Test  

so hab ich das abgeändert.

Die Dateien sind jetzt alle in dem Ordner C:\Test anstatt in dessen Unterordnern.

Mit freundlichen Grüßen
Member: beidermachtvongreyscull
beidermachtvongreyscull Apr 21, 2016 at 10:59:22 (UTC)
Goto Top
Prima.
wenn es klappt, dann setze den Thread als "gelöst".
Member: Ghostrider1911
Ghostrider1911 Apr 21, 2016 at 11:01:57 (UTC)
Goto Top
Nein, leider klappt es eben noch nicht so wie ich will, die Dateien werden eine Eben zu weit verschoben.


mfg
Member: beidermachtvongreyscull
beidermachtvongreyscull Apr 21, 2016 at 11:04:32 (UTC)
Goto Top
Sorry,

dann habe ich das Problem nicht verstanden.

Ich dachte, Du hast unter einem Ordner eine Unterordnerstruktur und möchtest alle Dateien in besagter Unterordnerstruktur in ein neues Zielverzeichnis bringen.
Member: Ghostrider1911
Ghostrider1911 Apr 21, 2016 at 11:15:45 (UTC)
Goto Top
Nein, ich glaub ich muss das nochmal erklären:

Ich habe folgende Ordnerstruktur:

Hauptordner/Unterordner1.1/Unterordner2.1/(Dateien)
Hauptordner/Unterordner1.2/Unterordner2.2/(Dateien)
Hauptordner/Unterordner1.3/Unterordner2.3/(Dateien)

Ich will das die Dateien z.B. vom Unterordner 2.1 in den Unterordner 1.1 verschoben werden.
-> Dateien vom Unterordner 2.2 nach Unterordner 1.2

Also quasi das die Dateien eine Verzeichnisseben weiter nach "oben" kommen.

mfg
Member: beidermachtvongreyscull
beidermachtvongreyscull Apr 21, 2016 at 15:17:07 (UTC)
Goto Top
Member: Biber
Biber Apr 21, 2016 updated at 16:05:57 (UTC)
Goto Top
Moin ghostrider1911,

nun macht doch da nich' so'n Heckmeck drum.... die Lösung steht doch oben.
Wenn es ein Verzeichnis höher als in dem obigen Beispiel kopiert werden soll, dann einfach den Verweis "ein Verzeichnis höher" an das Ziel anhängen.

Folgendes Beispiel am CMD-Prompt sollte es zeigen:
>
C:\Users\Biber>dir y:\temp\history.* /b /s
y:\temp\Workbench\history.txt

C:\Users\Biber>for /f "tokens=*" %f in ('dir y:\temp\history.txt /a-D /s /b') do copy "%f" "%~dpf..\"

C:\Users\Biber>copy "y:\temp\Workbench\history.txt" "y:\temp\Workbench\..\"
        1 Datei(en) kopiert.

C:\Users\Biber>dir y:\temp\history.* /b /s
y:\temp\history.txt
y:\temp\Workbench\history.txt

Würde auch funktionieren, wenn die Verzeichnisse statt "\temp\workbench\" wie bei mir nun meinetwegen "Hauptordner/Unterordner1.3/Unterordner2.3" heissen.

Was immer auch in dem superuser-Forum steht... vielleicht bekommen die es einfacher hin.

Grüße
Biber
Member: Ghostrider1911
Ghostrider1911 Apr 22, 2016 at 04:48:53 (UTC)
Goto Top
Hallo, danke für die weiteren Antworten!

Der Link zum Super user Forum brachte mich zum Erfolgt!

Mit diesem Skript:

@echo off

set "topfolder=C:\Temp\SE373589\top_folder"  

set "startdir=%CD%"  
cd /d "%topfolder%"  

set ctoptest=0
set cfilecount=0

for /d %%f in ("*") do call :worklevel1 "%%~f"  
if %ctoptest% EQU 0 echo There are no matching subfolders in "%topfolder%".  
if %cfilecount% EQU 0 echo There were no files moved.
if %cfilecount% EQU 1 echo %cfilecount% file was moved.
if %cfilecount% GEQ 2 echo %cfilecount% files were moved.

cd /d "%startdir%"  
goto :EOF





:worklevel1

set "subfolder=%~1"  
set /a ctoptest+=1

echo Processing subfolder "%subfolder%" ...  
set cwork1test=0

for /d %%g in ("%subfolder%\*") do call :worklevel2 "%%~g"  
if %cwork1test% EQU 0 echo There are no matching subfolders in "%subfolder%"  
echo.

set "subfolder="  
set cwork1test=
goto :EOF





:worklevel2

set "subsubfolder=%~1"  
set /a cwork1test+=1

echo Processing subsubfolder "%subsubfolder%" ...  
set cwork2test=0

for %%h in ("%subsubfolder%\*") do call :workmove "%%~h"  
if %cwork2test% EQU 0 echo There are no files to move in "%subsubfolder%"  

set "subsubfolder="  
set cwork2test=
goto :EOF





:workmove

set "targetfile=%~1"  
set /a cwork2test+=1
set /a cfilecount+=1

echo Moving file "%targetfile%" to "%subfolder%" (%cwork2test%)...  

move "%targetfile%" "%subfolder%" >nul 2>&1  

set "targetfile="  
goto :EOF

Das macht genau das was ich möchte ;)

mfg und danke für die Hilfe!
Member: beidermachtvongreyscull
beidermachtvongreyscull Apr 22, 2016 at 06:34:26 (UTC)
Goto Top
OK.
Dann setze den Thread bitte auf gelöst.