
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"; done
Ersetzt 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, '(')+')')
}