the-nomis
Goto Top

Ordnerhierarchie auf eine Ebene reduzieren?

automatisierung mit batch oder software gesucht

lästige handarbeit, die immer wieder vorkommt: ein übergeordnetes verzeichnis enthält mehrere (teilweise verschachtelte) unterverzeichnisse in denen verschiedene dateien liegen, die man gerne ohne die ganze ordnerstruktur in einem verzeichnis hätte.



ordner
..unterordner1
datei1
datei2
..unterorder2
datei2
datei3
datei4


---> MIT MÖGLICHST EINEM KLICK UMWANDELN IN:


ordner
..datei1
..datei2
..datei2_2
..datei3
..datei4



hat jemand von euch eine bequeme lösung für dieses problem, die einem den ganzen ausschneiden-einfügen-prozess erspart? Idealerweise mit einer automatischen umbennung bei gleichem dateinamen oder nachfrage ob ersetzt werden soll..

vielen dank schon mal im voraus!

gruß simon

Content-Key: 90536

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

Printed on: April 26, 2024 at 13:04 o'clock

Member: D3S3RT
D3S3RT Jun 24, 2008 at 13:29:27 (UTC)
Goto Top
also das Programm "total commander" ( http://www.ghisler.com/ddownload.htm ) hat den Shortcut Strg + b .. Damit werden alle Dateien aller Unterverzeichnisse in einer Liste dargestellt.
Wenn du nun dann mit Strg + NumPlus
markierst und mit Strg + x ausschneidest, mit Strg + r
die Ansicht wieder auf normal machst, und mit Strg + v
das ganze wieder einfügst. dann haste das schonmal. Doppelte Dateinamen machen hier leider Stress. Die müsstest du vorher ausschliessen. z.b. wenn du in der Ansicht, alle markiert hast mit Strg + m in das Umbenenntool reingehst. und dann als neuen Namen [P][N] einträgst, wird jede datei von pfad1\dateiname in pfad1\pfad1dateiname umbenannt, dann hättest du Dopplungen ausgeschlossen.
Member: bastla
bastla Jun 24, 2008 at 14:14:56 (UTC)
Goto Top
Hallo the-NoMIs und willkommen im Forum!

Für den folgenden Batch benötigst Du etwas mehr als einen Klick - der Ausgangsordner ist nämlich auf den Batch zu ziehen (oder der Batch über CMD mit Angabe des Ordners als Parameter aufzurufen):
@echo off & setlocal
if [%1]== goto :Usage
if not exist "%1\" goto :Usage  

pushd %1
for /d %%i in (*.*) do call :ProcessDir "%%i"  
popd
goto :eof

:ProcessDir
for /f "delims=" %%d in ('dir %1 /s /b /a-d 2^>nul') do call :ProcessFile "%%d"  
dir %1 /s /b /a-d >nul 2>nul || rd /s /q %1
goto :eof

:ProcessFile
set "N=%~nx1"  
set Nr=1
:Loop
if not exist "%N%" goto :DoIt  
set /a Nr+=1
set "N=%~n1_%Nr%%~x1"  
goto :Loop
:DoIt
move %1 "%N%"  
goto :eof

:Usage
echo\
echo\
echo Bitte beim Aufruf einen existierenden Ordner angeben!
echo\
pause
Nach dem Zusammenfassen der Dateien im angegebenen/übergebenen Ordner werden alle Unterordner, unterhalb dererer sich keine Dateien mehr befinden, gelöscht. Falls Du das nicht willst, einfach "::" an den Anfang der Zeile 12 setzen.

Bitte zunächst Testdaten verwenden!

Grüße
bastla
Member: the-NoMIs
the-NoMIs Jun 24, 2008 at 15:42:00 (UTC)
Goto Top
geeeenial!

was soll ich sagen.. perfekt - DANKE!

gruß simon
Member: the-NoMIs
the-NoMIs Jun 25, 2008 at 10:48:13 (UTC)
Goto Top
nach sehr zufriedenstellenden testläufen ist mir eine kleinigkeit aufgefallen, die noch zu meiner absoluten glückseeligkeit fehlen würde ;)

diese umbenennung wie sie D3S3RT erwähnt:

"...als neuen Namen [P][N] einträgst, wird jede datei von

pfad1\dateiname

in

pfad1\pfad1dateiname

umbenannt, dann hättest du Dopplungen ausgeschlossen."

könnte man die noch in den batch einbauen? damit würde man sich die "_2" bei gleichem dateinamen sparen und hätte den vorteil, dass die sortierung der datein nicht verloren ginge.
beispielsweise erstellt meine dslr automatisch neue ordner auf der speicherkarte und beginnt in jedem dieser ordner mit der durchnummerierung der fotos wieder bei 1. mit obigem batch geht mir somit leider die chronologische reihenfolge verloren, die ich zwar über die exif-daten wiederherstellen kann, aber das ist dann schon wieder mehr als ein klick ^^

vielen dank für die mühe!

gruß simon
Member: bastla
bastla Jun 25, 2008 at 14:23:01 (UTC)
Goto Top
Hallo the-NoMIs!

Meinst Du so:
@echo off & setlocal
if [%1]== goto :Usage
if not exist "%1\" goto :Usage  

pushd %1
for /d %%i in (*.*) do call :ProcessDir "%%i"  
popd
goto :eof

:ProcessDir
for /f "delims=" %%d in ('dir %1 /s /b /a-d 2^>nul') do call :ProcessFile "%%d"  
dir %1 /s /b /a-d >nul 2>nul || rd /s /q %1
goto :eof

:ProcessFile
set "N=%~pnx1"  
set "N=%N:\=%  
move %1 "%N%"  
goto :eof

:Usage
echo\
echo\
echo Bitte beim Aufruf einen existierenden Ordner angeben!
echo\
pause
Grüße
bastla
Member: the-NoMIs
the-NoMIs Jun 25, 2008 at 17:19:24 (UTC)
Goto Top
*begeistertdurchdiegegendhüpf*
Member: bastla
bastla Jun 25, 2008 at 17:31:37 (UTC)
Goto Top
Hallo the-NoMIs!

Ist das so zu interpretieren, dass ich Dich guten Gewissens darauf hinweisen darf: How can I mark a post as solved? face-wink

Grüße
bastla
Member: the-NoMIs
the-NoMIs Jun 25, 2008 at 18:57:38 (UTC)
Goto Top
darfst du ^^

wird auf der stelle erledigt.

nochmals danke für die sofort-hilfe und viele grüße

simon