booster07
Goto Top

Dateiname entsprechend einem um x-Ebenen übergeordeten Ordnernamen umbenennen

Hallo Zusammen,

ich bin Batch-Amateur und komme bei folgendem Problem nicht weiter.

Ich will sehr viele Dateien, die in sehr vielen Ordnern abgelegt sind entsprechend dem Namen eines übergeordneten Ordners umbenennen.
Im Ordner Test sind sehr viele Unterordner abgelegt (z.B. Schmitt, Maier, Huber...). Diese enthalten alle jeweils den Ordner "Obst" mit den Unterordnern "Apfel" und "Birne".

Ordnerstruktur:
U:\Test\Schmitt\Obst\Apfel\Quelle_01.xlsx
U:\Test\Schmitt\Obst\Apfel\Quelle_02.xlsx
U:\Test\Schmitt\Obst\Apfel\Quelle...
U:\Test\Schmitt\Obst\Birne\...
U:\Test\Maier\Obst\Apfel\...
U:\Test\Maier\Obst\Birne\...
U:\Test\Huber\...
...

Alle Dateien in den Ordnern "Apfel" und "Birne" sollen umbenannt werden. Dabei soll der bestehende Dateiname mit dem übergeordneten Ordnernamen (z.B. Schmitt, Maier, Huber) kombiniert werden. Der neue Dateiname soll dann z.B. wie folgt lauten:

"Schmitt_Quelle_01.xlsx" oder "Maier_Quelle_05.xlsx"

Kann man eine Batch-Datei auch so gestalten, dass nachträglich ausgewählt werden kann, welche Ebene der Ordnerstruktur zur Namensgebung verwendet werden soll. Also dass zum Beispiel durch eine einfache Änderung der Batch-Datei auch folgende Dateinamen erzeugt werden können:

"Obst_Quelle_01.xlsx" oder "Obst_Quelle_05.xlsx"

Ich hoffe Ihr könnt mir weiterhelfen und wäre überaus dankbar über eine Antwort.


Viele Grüße

Booster07

Content-Key: 319426

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

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

Member: Friemler
Solution Friemler Oct 28, 2016 updated at 18:41:49 (UTC)
Goto Top
Hallo Markus,

so sieht man sich wieder. face-wink

Das nächste Script:
@echo off & setlocal

set "RootPath=U:\Test"  
set "RenDirs="Apfel" "Birne""  
set "LevelCnt=2"  

for /d /r "%RootPath%" %%a in (%RenDirs%) do (  
  for %%b in ("%%a\*.*") do (  
    call :ProcessFile "%%b"  
  )
)

exit /b 0



:ProcessFile
  call :GetPathLevel "%~1" %LevelCnt% LevelName  
  ren "%~1" "%LevelName%_%~nx1"  
exit /b 0


:GetPathLevel
  setlocal

  set "TmpPath=%~dp1"  
  set "DirName="  
  set /a Cnt=0

  :Loop
    set "TmpPath=%TmpPath:~0,-1%"  
    for %%z in ("%TmpPath%") do set "DirName=%%~nxz"  
    call set "TmpPath=%%TmpPath:%DirName%=%%"  
    set /a Cnt+=1
  if %Cnt% lss %~2 goto :Loop
  
  endlocal & set "%~3=%DirName%"  
exit /b 0

In Zeile 5 kannst Du einstellen, wie viele Verzeichnisebenen von der Datei aus nach oben gegangen wird, um die Namensergänzung zu erzeugen. Ein Wert von 3 wäre die Ebene mit den Verzeichnissen Schmitt, Maier und Huber. Ein Wert von 2 wäre die Ebene mit den Obst-Verzeichnissen.

Grüße
Friemler
Member: Endoro
Endoro Nov 01, 2016 at 01:04:10 (UTC)
Goto Top
Hey,

wo ist noch das Problem?

Gruß, Endoro
Member: Booster07
Booster07 Nov 02, 2016 at 08:32:37 (UTC)
Goto Top
Hallo Friemler,

Entschuldigung für die späte Rückmeldung.

Auch dieses Script funktioniert natürlich wieder einmal. Super, vielen Dank!

Wahnsinn, was du mir schon geholfen hast.


Viele Grüße

Markus