stefanie.luehnsdorf
Goto Top

Ordner nach darin liegenden Dateien umbenennen

Hallo allerseits,

ich stehe vor einem Problem, für das ich bisher trotz allen Suchens und Herumprobierens keine Lösung gefunden habe. Ich suche ein Script (Batch; notfalls auch Perl, Python etc.) welches das folgende Problem lösen kann:

Szenario:

Ein Programm liest Messwerte aus. Diese werden für jede einzelne Messung in Unterordnern mit zufälligen Namen (zumindest habe ich bei der Benennung keine Systematik erkennen können) im Verzeichnis D:\data\ abgelegt. Die Ordnerliste sieht dann etwa so aus:

D:\data\5BF154ED065
D:\data\A254DC584E2
D:\data\BFCDC215487
D:\data\D18258D12A1
D:\data\FC2485693B4

Jeder einzelne dieser Ordner enthält mehrere Dateien mit Messwerten und genau eine Log-Datei, die nach dem Messzeitpunkt benannt ist und die Endung .log trägt.

D:\data\5BF154ED065
      • 20150113tuesday110557.log
      • DateiA.txt
      • DateiB.txt
      • usw.

Ziel ist nun ein Script, das sämtliche Ordner durchläuft und jeden einzelnen Ordner nach dem Namen der darin liegenden Log-Datei umbenennt.

Das Resultat soll dann also so aussehen:

D:\data\20150113tuesday110557
      • 20150113tuesday110557.log
      • DateiA.txt
      • DateiB.txt
      • usw.

Und das, wie gesagt, für jeden einzelnen der unzähligen Ordner die sich inzwischen angesammelt haben.


Vielleicht weiß ja einer von Euch, wie man sowas elegant lösen kann. Ich bin für jeden Hinweis dankbar.

Mit bestem Dank im Voraus
und den allerbesten Grüßen!

Steffi Lühnsdorf

Content-ID: 259684

Url: https://administrator.de/forum/ordner-nach-darin-liegenden-dateien-umbenennen-259684.html

Ausgedruckt am: 22.04.2025 um 08:04 Uhr

rubberman
Lösung rubberman 13.01.2015, aktualisiert am 15.01.2015 um 19:03:05 Uhr
Goto Top
Hallo Stefanie.Luehnsdorf, willkommen im Forum.

Dein Vorhaben sollte sich mit ein paar Zeilen Batchcode erledigen lassen.

*.bat
@echo off &setlocal
set "root=D:\data"  

cd /d "%root%"  
for /d %%i in (*) do for %%j in ("%%~i\*.log") do ECHO ren "%%~i" "%%~nj"  
PAUSE

Der Code zeigt lediglich, was passieren würde. Um ihn scharf zu machen, entferne ECHO und ggf. PAUSE.

Grüße
rubberman
colinardo
Lösung colinardo 13.01.2015, aktualisiert am 15.01.2015 um 19:03:22 Uhr
Goto Top
Hallo Steffi,
oder mit Powershell so:
$folder = 'D:\data'  
gci $folder | ?{$_.PSIscontainer} | %{Rename-Item $_.FullName (gci "$($_.Fullname)\*.log" | select -ExpandProperty Basename -First 1) -Force -EA Continue}  
Grüße Uwe
Stefanie.Luehnsdorf
Stefanie.Luehnsdorf 15.01.2015 um 19:02:54 Uhr
Goto Top
Hallo allerseits,

vielen Dank an rubberman und colinardo für die schnellen Lösungsvorschläge. Es hat perfekt funktioniert.
Ich hatte gar nicht erwartet, am selben Abend überhaupt schon eine Reaktion zu erhalten.

Vielen Dank und beste Grüße!

Steffi