Ordner umbenennen nach Inhalt

Gast #4722850
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
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 #4723838
unter linux ein leichtes.
da ich mich mit windows eigentlich gar nicht mehr auskenne, würde ich 
wirklich gerne mal sehen wie sowas dort gelöst wird. (sic)
Gast #4723962
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
... 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
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

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.