Skript zum Bereinigen von Ordnernamen

Skript zum Bereinigen von Ordnernamen

Ich habe viele Ordner, die basierend auf einigen Regeln umbenannt werden müssen. Beispiel für Ordner:

-- Some.Folder.Name.Today.2009
-- Another.messed.Up.folder.1980
-- Third.messed.Up.folder.1980

Ich würde gerne sehen, ob jemand ein schnelles Skript hat, um jeden Ordner umzubenennen, um den Punkt (.) aus dem Ordnernamen zu entfernen und auch Klammern um das Jahr zu setzen, so dass es so aussieht

-- Some Folder Name Today (2009)
-- Another messed Up folder (1980)
-- Third messed Up folder (1980)

Vielen Dank!

Antwort1

Perldamit gut klarkommt, sollte so etwas genügen:

use warnings;
use strict;
use File::Copy;

my $oldname;

opendir(my $d, ".") or die $!;
while(readdir $d) {
    if (-d $_ and $_ ne "." and $_ ne "..")
    {
        $oldname = $_;
        $_ =~ s/\./ /g;
        $_ =~ s/(\d{4})/($1)/g;
        move($oldname,$_);
    }
    }
closedir $d;

Nur kurz getestet, du kannst es gerne ändern oder modifizieren! Es ist auf keinen Fall perfekt. Habe es schnell zusammengehackt ;)

Notiz:In seinem aktuellen Zustand sollte es aus dem Verzeichnis mit den verstümmelten Ordnernamen ausgeführt werden.

C:\Benutzer\John\Desktop\Ordner>dir
 Der Datenträger im Laufwerk C hat keine Bezeichnung.
 Die Volume-Seriennummer lautet 8888-1666

 Verzeichnis von C:\Benutzer\John\Desktop\Ordner

29.01.2011 19:14 Uhr .
29.01.2011 19:14 Uhr ..
29.01.2011 19:07 Uhr irgendein.Ordnername.2008
29.01.2011 19:07 Uhr irgendein.Ordnername.2009
29.01.2011 19:16 Uhr 282 ren.pl
               1 Datei(en) 282 Bytes
               4 Verzeichnis(se) 53.349.425.152 Bytes frei

C:\Benutzer\John\Desktop\Ordner>ren.pl

C:\Benutzer\John\Desktop\Ordner>dir
 Der Datenträger im Laufwerk C hat keine Bezeichnung.
 Die Volume-Seriennummer lautet 8888-1666

 Verzeichnis von C:\Benutzer\John\Desktop\Ordner

29.01.2011 19:16 Uhr .
29.01.2011 19:16 Uhr ..
29.01.2011 19:07 Uhr irgendein Ordnername (2008)
29.01.2011 19:07 Uhr irgendein Ordnername (2009)
29.01.2011 19:16 Uhr 282 ren.pl
               1 Datei(en) 282 Bytes
               4 Verzeichnis(se) 53.349.425.152 Bytes frei

Antwort2

Ich würde vorschlagen, die Dateinamen durch ein kurzes Sed-Skript laufen zu lassen. for file in dir/with/files/*; do name=$(basename "$file" | sed 's/\./ /g;s/\([12][09][0-9][0-9]\)/(\1)/'); mv "$file" "$(dirname \"$file\")/$name"; doneErsetzt die Punkte durch Leerzeichen und umgibt das Jahr dann mit Klammern.

Stellen Sie sicher, dass diese Dateien beim Scannen/Bearbeiten richtig in Anführungszeichen gesetzt sind. Leerzeichen werden häufig als Trennzeichen zwischen Elementen verwendet.

Antwort3

InPower Shell(ich glaube, dass es unter Win7 standardmäßig installiert ist, aber ich habe keinen Windows-Rechner, also kann ich mich auch irren),

gci *.* | %{
 mi $_ ($_.name.replace('.', ' ').insert($_.name.lastindexof('.')+1, '(')+')')
}

verwandte Informationen