Ordner umbenennen nach Inhalt

Gast #4722850
Lesenswert?

Hallo,
ich habe eine Reihe von Ordner (534 St.) die im Namen einfach 
durchnummeriert sind. In den Ordner sind jeweils zwei Dateien (.jpg und 
eine .txt) im Schema TQF_0123_Messreihe_Blau.tx, die jpg. heißt gleich, 
nur eben mit andere Dateiendung.

wobei die Bezeichnung hinter der Zahl immer variiert. Gibt es eine 
Möglichkeit unter Win7 alle Ordner entsprechend der beinhaltenden Datei 
umzubenennen? Ich hätte gerne dass der Ordner dann eben 
TQF_0123_Messreihe_Blau heißt.

Editieren von Hand ist keine Option, es sind einfach zuviele Ordner :-(
#4723112
Lesenswert?

So was mache ich mit autohotkey.
Sehr mächtig, dabei noch recht einfach zu lernen.

Ist ein Script-Interpreter. Ein Vorteil: wenn ein Script aus getestet 
ist, kann man es in eine exe kompilieren. Damit kann man dann alles 
machen, was mit jeder exe geht, zB via Explorer-kontextmenu aufrufen. 
Finde ich sehr praktisch.

Ist natürlich mit Lernaufwand verbunden und Geschmacksache
Gast #4723962
Lesenswert?

c.m. schrieb:
> würde ich
> wirklich gerne mal sehen wie sowas dort gelöst wird. (sic)
Passend zu deinem Name mit cmd.exe.
1
@echo off
2
setlocal EnableExtensions, EnableDelayedExpansion
3

4
rem loop for all txt files in all subfolders
5
for /R %%i in (*.txt) do (
6

7
  rem assign filename as new path
8
  set npath=%%~ni
9

10
  rem remove last \ from oldpath
11
  set opath=%%~dpi
12
  set opath=!opath:~0,-1!
13
  
14
  echo move /Y "!opath!" "!npath!"
15
  move /Y "!opath!" "!npath!"
16
)
17

18
endlocal
19
goto :eof

Hat eventuell Probleme, wenn mehrere Ebenen geschachtelt sind und prüft 
auch nicht auf die Namensgleichheit des jpg.
Gast #4723969
Lesenswert?

... in C# würde es vielleicht so aussehen (nicht getestet):
1
using System.IO;
2
string sourcedirectory = [Verzeichnis mit den 534 Unterverzeichnissen];
3
foreach (string subdir in Directory.GetDirectories(sourcedirectory))
4
{
5
 string newname = Directory.GetFiles(subdir)[0];
6
 int i0 = newname.LastIndexOf('\\') + 1;
7
 int i1 = newname.IndexOf('.');
8
 newname = newname.Substring(i0 , i1 - i0);
9
 newname = subdir.Substring(0, subdir.LastIndexOf('\\') + 1) + newname;
10
 Directory.Move(subdir, newname);
11
}
Gast #4725107
Lesenswert?

Hallo,
ähnlich wie Klickibunti habe ich es mit C# gemacht.
Für mich war die Verwendung von FileInfo einfacher als das manuelle 
aufzwirbeln von Pfad und Dateinamen.

Grüße
Holger
1
string sourcedirectory = FilePath; // FilePath = cmd-Eingabe
2
foreach (string subdir in Directory.GetDirectories(sourcedirectory))
3
{
4
string FileName = "";
5
string[] files = Directory.GetFiles(subdir);
6
for (int i = 0; i < files.Length; i++)
7
{
8
    if (files[i].EndsWith(".txt"))
9
    {
10
  FileName = files[i];
11

12
  File = new FileInfo(FileName);
13
  FileName = File.Name; // FileInfo mit Dateiname ohne Pfadangabe
14
  FileName = FileName.Replace(".txt", ""); // Dateierweiterung löschen
15

16
  break;
17
    }
18
}
19

20
string newDir = FilePath + FileName; // FilePath = cmd-Eingabe (Übergeordnetes Verzeichnis)
21
Directory.Move(subdir, newDir);
22
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren