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

Ausgedruckt am: 19.03.2024 um 06:03 Uhr

Mitglied: Friemler
Lösung Friemler 28.10.2016 aktualisiert um 20:41:49 Uhr
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
Mitglied: Endoro
Endoro 01.11.2016 um 02:04:10 Uhr
Goto Top
Hey,

wo ist noch das Problem?

Gruß, Endoro
Mitglied: Booster07
Booster07 02.11.2016 um 09:32:37 Uhr
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