Elegant umbenennen

Praxis & Tipps | Tipps & Tricks

Nach jedem Urlaub stehe ich vor dem Problem, den Dateien der Erinnerungsfotos einen anständigen Namen verpassen zu müssen, weil meine Kamera ihnen nur generische Namen der Form „DSC_xxx.jpg“ verpasst. Kennen Sie einen Weg, diese Herkules-Arbeit zu automatisieren?
Eine einfache Form des Umbenennens mehrerer Dateien beherrscht bereits der Explorer von Windows XP. Markieren Sie dazu die Dateien und wählen Sie aus dem Kontextmenü einer markierten Datei die Funktion „Umbenennen“ aus oder drücken Sie F2. Vergeben Sie einen neuen Namen und schließen Sie mit der Return-Taste ab.

Wenn Sie die Datei beispielsweise „Hawaii“ nennen, benennt der Explorer die anderen Dateien nach dem Schema „Hawaii (x)“, wobei er für x fortlaufende Zahlen einsetzt.

Über die Eingabeaufforderung können Sie mit dem Befehl rename (kurz: ren) ebenfalls viele Dateien in einem Rutsch umbenennen - wenn die Rahmenparameter stimmen. Der Befehl hat nämlich beispielsweise die Eigenart, beim Umbenennen der Form

ren DSC_*.jpg Hawaii*.jpg

nicht einfach „DSC_“ im Dateinamen mit „Hawaii“ zu ersetzen und den Rest zu übernehmen, sondern - weil „Hawaii“ sechs Zeichen lang ist - nur die ersten sechs Buchstaben des Namen damit zu ersetzen. Falls der neue Namen länger als der alte ist, bricht rename mit einer Fehlermeldung ab. Auch wenn der neue Dateiname ein Leerzeichen enthält, versagt rename.

Am besten geht es mit einer kleinen Batch-Datei, die rename seine Mätzchen austreibt. Sie erwartet drei Parameter: zuerst ein Muster für die Dateinamen, die bearbeitet werden sollen, dann den Teilstring, der ersetzt werden soll, und schließlich den neuen Namensteil:

@echo off %debug%
setlocal enabledelayedexpansion
for %%i in (%1) do (
set x=%%i
rename "%%i" "!x:%~2=%~3!"
)

Wenn Sie dieses Skript als renp.cmd speichern, würde Ihre Aufgabe mit dem Aufruf

renp DSC_*.JPG DSC_ "Meine Urlaubsbilder-"

gelöst.

Wenn Sie den neuen Namensteil weglassen, wird der zu ersetzende Teilstring gelöscht.

Das Skript benutzt die wenig bekannte Stringersetzung, die cmd.exe schon seit Windows NT unterstützt. Für

%VAR:str1=str2%

setzt cmd den Inhalt der Variable VAR ein und ersetzt str1 durch str2.

Die zweite wichtige Funktion ist die „verzögerte Ersetzung“, die mit setlocal enabledelayedexpansion aktiviert wird. Sie sorgt dafür, dass in der FOR-Schleife die Variable x in jedem Durchlauf neu ausgewertet wird, da sie statt mit %x% mit !x! angesprochen wird. Ohne die verzögerte Erweiterung würde die Variable nur ein einziges Mal eingesetzt, und zwar unlogischerweise mit dem letzten Wert des FOR-Durchlaufs.

Die verzögerte Erweiterung lässt sich auch mit dem Parameter /V:ON für cmd.exe generell aktivieren. Dann können Sie die Dateien mit

for %i in (DSC_*.jpg) do set x=%i&ren "%i" "!x:DSC_=Meine Urlaubsbilder-!"

auch direkt auf der Kommandozeile umbenennen.

Die Kommandozeile von Windows 2000 kennt die Anweisung setlocal enabledelayedexpansion nicht, akzeptiert die verzögerte Erweiterung aber als Parameter /V:ON für cmd.exe.

Wer eine grafische Programmoberfläche der Kommandozeile vorzieht, kann seine Bilder auch mit der Skriptesammlung ac'tivAid umbenennen (siehe Soft-Link). Über ein Tastaturkürzel (Standard ist Strg+U) ruft man für im Explorer ausgewählte Dateien die Funktion FileRenamer auf. Im erscheinenden Dialog kann man mit Hilfe von Platzhaltern wie \n für eine fortlaufende Nummerierung oder \c für den Inhalt der Zwischenablage neue Dateinamen zusammenbauen. Der Dialog zeigt dabei eine Vorschau auf die neuen Dateinamen. (pek)

Soft-Link

Anzeige