umbenennen von Ordnern nach Dateinamen

BodenseepiratKN

Grünschnabel
Hallo!
Ich hjabe jetzt schon einige Tage (!) damit verbracht eine Lösung für mein Problem zu finden. Ich such mir dabei nen Wolf *g*
Ich habe folgendes Problem:
mehrere Ordner, mit jeweils nur einer Datei.
Ich möchte mit einer Batch, falls möglich jeden entsprechenden Ordner mit dem Namen der darin enthaltenen Datei umbenennen.
Beispiel:
Neuer Ordner 1 hat den Inhalt Beispiel 1.txt
Neuer Ordner 2 hat den Inhalt Beispiel 2.txt
usw.
Da das weit über 500 Ordner sind wäre es eine Mammut Aufgabe jeden Ordner manuell umzubenennen.

Hat wer eine Idee?

Mein Dank wird Euch auf ewig nachschleichen :-D
 
Hallo BodenseepiratKN,
leider ist deine Frage nicht ganz vollständig. Sagen wir einmal in deiner Ausgangssituation hast du folgende Dateien:
"Ordner 1" mit Inhalt "Datei 1.dat"
"Ordner 2" mit Inhalt "Datei 2.dat"
"Ordner x" mit Inhalt "Datei x.dat"

Jeder Ordner enthält nur eine Datei.
Okay, jetzt ist die Frage: Nach welchem Schema möchtest du die Ordner umbenennen?
Möchtest du z.B. nur ein Präfix hinzufügen? Sodass z.B. folgendes rauskommt:
"Präfix Ordner 1" mit Inhalt "Datei 1.dat"
...

Oder soll die Umbenennung etwas mit den Dateien innerhalb der Ordner zu tun haben?

Gruß Technipion

PS: Prinzipiell kann man in Bash Ordner umbennen, indem man sie rekursiv zu einem anderen Ort verschiebt. In der Praxis besser ist allerdings sie zu kopieren, und die Originale erst dann zu löschen.
 
Danke für die schnelle Antwort.
Die Ordner sollen gemäß der darin enthaltenen Datei umbenannt werden.
Also aus Neuer Ordner 1 (in dem sich Beispiel 1.txt befindet), soll in "Beispiel1" umbenannt werden...
 
Hallo BodenseepiratKN,
bei mir steht es zeitlich im Moment leider sehr knapp. Ich habe dir schnell ein Bash-Skript gebastelt, das deine Aufgabe (zumindest so wie ich es verstanden habe) erledigt. Du wirst wahrscheinlich zu der ein oder anderen Zeile Fragen haben (was sehr gut ist, so lernt man schließlich!), stelle sie einfach hier im Forum. Auch wenn ich die nächsten Tage nicht antworten kann, werden dir viele andere Mitglieder mit Sicherheit gerne behilflich sein ;).

Hier ist der Code:
Code:
#!/bin/bash

OIFS="$IFS"
IFS=$'\n'

for folderName in $(ls -d */);
  do
    cd "$folderName"
    fileName=`ls`
    cd ..
    fileNameWithoutExtension=${fileName%%.*}
    mv "$folderName" "$fileNameWithoutExtension";
done

Du kannst das Skript über $ bash rename.sh ausführen, oder es ausführbar machen und dann einfach $ ./rename.sh eintippen. Die Datei muss in dem Ordner liegen, in dem auch deine 500 umzubenennende Ordner liegen.

Gruß Technipion
 
oha!
Nun ich habe nicht erwartet das die Windows Powershell sich so stark von der "normalen" Stapelverarbeitung unterscheiddet. und nur mit batch Dateien kann ich gerade so arbeiten UND verstehn.
Dein Code funktioniert so nicht und ich kann nicht mal sagen warum (ich versteh nicht eine Zeile)
Ich bekomme eine Fehlermeldung, als ich die bash in einem Probeordner (mit nur 9 Ordnern und einer Datei Inhalt) ausprobierte bekam ich die Meldung
 

Anhänge

  • bash_error.JPG
    bash_error.JPG
    63,3 KB · Aufrufe: 5
Hi

Bash ist nicht Powershell, sondern (ursprünglich) eine Linux-Shell (von der es inzwischen auch ein paar eingeschränkte Varianten gibt, die man auf Windows installieren kann). Kein Wunder dass es nicht so direkt funktioniert.

(Der Name ist keine Abwandlung von Batch, sondern vom Vorgänger "Bourne-Shell": Bourne-Again-SHell)
 
Das Forum ist schon ok; nur haben Technipion und du wohl verschiedene Vorstellungen was eigentlich gemacht werden soll...

hab selber mit Windows-Batch leider kaum was zu tun, aber evt. schaff ich es morgen, etwas funktionierendes zusammenzustellen...
 
Ohhhhhh man. Jetzt komme ich gerade aus dem Urlaub zurück, und erst jetzt sehe ich, dass ich in deinem ersten Beitrag versehentlich "Bash" statt "Batch" gelesen habe BodenseepiratKN. Tut mir leid, das war mein Fehler :oops:...

Mit Batch kenne ich mich leider nicht wirklich aus. Ich kann die Basics, aber Skripte schreiben ist mir zu hoch. Ich meine aber, dass man ab Windows 10 auch Bash zur Verfügung hat. Da ich kein Win10 habe, kann ich jedoch nicht überprüfen ob das Bash-Skript ordnungsgemäß arbeitet.

Ich habe dir ein kleines Skript in Python gebastelt, das die Ordner umbenennt. Python ist sowieso eine gute Anlaufstelle für das Schreiben kleinerer Hilfsprogramme. Und es ist nicht schwer zu installieren - https://www.python.org/.

Python:
import os
from os.path import isfile, join, basename, splitext


def main():

    cwd = os.getcwd()

    def getFilename(files):
        return splitext(basename(files[0]))[0]

    for folder in listFolders(cwd):

        files = [join(folder, i) for i in os.listdir(folder)]

        if not filesAreGood(files): break

        new_folder_name = getFilename(files)
        os.rename(folder, join(cwd, new_folder_name))
  
    return 0


def listFolders(cwd):
  
    folders = [x[0] for x in os.walk(cwd)]
    folders.remove(cwd)

    return folders


def filesAreGood(files):

    if len(files) != 1:
        print('WARNING: {} contains not exaclty 1 file!'.format(folder))
        return False

    if not isfile(files[0]):
        print('WARNING: {} contains a subfolder!'.format(folder))
        return False

    return True


if __name__ == '__main__':
    main()

Falls du Fragen zum Code hast, werde ich sie dir gerne beantworten ;).

Gruß Technipion
 
Zurück