Problem
Es kommt oft vor, dass man eine grosse Anzahl von Datei umbenennen muss, etwa .jpg-Dateien. Man hat zum Beispiel ein paar hundert Dateien mit Namen wie
– Pentax017001.jpg
– Pentax017002.jpg
– Pentax017003.jpg
und möchte sie lieber so nennen
– Bali017001.jpg
– Bali017002.jpg
– Bali017003.jpg
Lösung
Für das genannte Problem gibt es natürlich mehr als nur eine Lösung. Ein interessantes Freeware-Programm, das diese und ähnliche Aufgaben löst, ist dieses:
http://www.1-4a.com/rename/.
In diesem Artikel stellen wir zwei Skriptlösungen vor, die das gezeigte Problem ebenfalls lösen können: Eine Batchdatei und ein Skript in Visual Basic Script (VBS). Auch wenn manche Werkzeuge noch mehr können, bieten unsere Skripts vielleicht Anregungen, ähnlich gelagerte Lösungen ausfzubauen.
Wenn man die Batch-Datei „NewName.bat“ oder das VBS-Skript im Ordner ablegt, wo sich die Dateien befinden, dann kann man mit einem Doppelklick in sämtliche Dateinamen die Zeichenfolgen „Pentax“ auf „Bali“ ändern. Wahlweise kann das Programm auch sämtliche Unterverzeichnisse bearbeiten. Um sicher zu sein, dass die Umbenennung auch stimmt, kann das Programm erst im Problauf betrieben werden.
Die Batch-Lösung
Beachte: Das Batchprogramm kann mit speziellen Zeichen wie % ^ & nicht umgehen und wird deshalb automatisch beendet. Enthalten manche Namen solche Zeichen, dann müssen sie erst von Hand umbenannt werden, oder das Programm „NewName.vbs“ muss verwendet werden.
Verwendung
Den Quelltext markieren, kopieren und dann in die Datei „NewName.bat“ einfügen. „NewName.bat“ muss im selben Verzeichnis abgelagert werden, wo sich die Dateien befinden, die umbenennt werden müssen.
Als nächstes den Quelltext anpassen. Dazu müssen die folgenden 5 Zeilen geändert werden:
set aktiv=nein (nein=bloss Probelauf, ja=Umbenennen)
set sub=ja (ja=Unterverzeichnisse bearbeiten, nein=Unterverzeichnisse nicht bearbeiten)
set typ=jpg (Dateityp. Z.B. jpg für Bilderdateien)
set alt=0000 (Ursprüngliche Zeichenfolge)
set neu=-2008 (Gewünschte Zeichenfolge)
Quelltext
@echo off
goto Start
----------------------------------------------------------------
Dieses Programm wird alle Dateien im gegenwärtigen Verzeichnis
umbenennen, indem die Zeichenfolge {alt} in den Dateinamen durch
die Zeichenfolge {neu} ersetzt wird.
Beispiel:
set alt=0000
set neu=-2008
Die Datei 12340000.jpg wird auf 1234-2008.jpg umbenannt.
Die Datei 9970000.jpg wird auf 976-2008.jpg umbenannt.
Die folgende Einstellungen müssen weiter unten vorgenommen werden
set aktiv=nein (nein=bloss Probelauf, ja=Umbenennen)
set sub=ja (ja=Unterverzeichnisse bearbeiten, nein=Unterverzeichnisse nicht bearbeiten)
set typ=jpg (Dateityp. Z.B. jpg für Bilderdateien)
set alt=0000 (Ursprüngliche Zeichenfolge)
set neu=-2008 (Gewünschte Zeichenfolge)
Datein werden nicht umbenannt, falls eine gleichnamige
Datei schon existiert.
Falls Dateinamen existieren, welche die Zeichen %, ^ oder &
enthalten, wird das Programm nicht ausgeführt. In solchen
Fällen ist das entsprechende VB Script Programm zu benutzen.
------------------------------------------------------------------
:Start
rem -----------------------------------------------------------
rem Du musst die nächsten 5 Zeilen deiner Umgebung anpassen!
rem -----------------------------------------------------------
set aktiv=nein
set sub=nein
set typ=txt
set alt=temp
set neu=xyz
rem -----------------------------------------------------------
rem Die Einstellungen "aktiv" und "sub" bearbeiten
rem -----------------------------------------------------------
setlocal EnableDelayedExpansion
if /i %aktiv%==ja (set cmd=if not) else (set cmd=rem)
if /i %sub%==ja (set switch=/s) else (set switch=)
rem -----------------------------------------------------------
rem Eine Liste aller Dateien aufstellen. Gibt es problematische Zeichen?
rem -----------------------------------------------------------
dir /b /a-d %switch% *.%typ% > "%temp%\dir.txt"
findstr "%% ^ &" "%temp%\dir.txt" > nul && goto Error
rem -----------------------------------------------------------
rem Die Dateien umbenennen
rem -----------------------------------------------------------
for /F "delims=" %%a in ('type "%temp%\dir.txt"') do (
set Name1=%%a
call set Name2=!Name1:%alt%=%neu%!
if not "!Name2!"=="!Name1!" echo ren "!Name1!" "!Name2!"
%cmd% "!Name2!"=="!Name1!" ren "!Name1!" "!Name2!"
)
rem -----------------------------------------------------------
rem Programmende
rem -----------------------------------------------------------
:Exit
echo.
echo Dieses Fenster mit der Leertaste schliessen.
pause > nul
goto :eof
rem -----------------------------------------------------------
rem Problematische Zeichen anzeigen
rem -----------------------------------------------------------
:Error
echo.
echo Warnung: Die folgenden Dateinamen enthalten Zeichen, welche
echo dieses Batchprogramm nicht verarbeiten kann.
findstr "%% ^ &" "%temp%\dir.txt"
goto :Exit
Die VBS-Lösung
Verwendung: Den Quelltext markieren, kopieren und dann in die Datei „NewName.vbs“ einfügen. „NewName.vbs“ muss im selben Verzeichnis abgelagert werden, wo sich die Dateien befinden, die umbenennt werden müssen.
Als nächstes Windows anweisen, das Programm „cscript.exe“ für die Verarbeitung zu gebrauchen. (Alternativ: Das Skript jedes Mal in einem CMD-Fenster ausdrücklich mit „cscript newname.vbs“ aufrufen.)
1. Start / Ausführen klicken.
2. cmd.exe tippen und OK klicken.
3. Den folgenden Befehl tippen: cscript //H:CScript {Enter}
4. Das schwarze Fenster schliessen.
Als letztes den Quelltext anpassen. Dazu müssen die folgenden 4 Zeilen geändert werden:
Const sTyp = „jpg“ ‚Dateityp. Z.B. jpg für Bilderdateien
Const sOne = „0000“ ‚Ursprüngliche Zeichenfolge
Const sTwo = „2008“ ‚Gewünschte Zeichenfolge
Const SubDir = False ‚True=Unterverzeichnisse bearbeiten, False=Unterverzeichnisse nicht bearbeiten
Quelltext
- ‚————————————————
- ‚Dieses Programm wird alle Dateien im gegenwärtigen Verzeichnis
- ‚umbenennen, indem die Zeichenfolge {alt} in den Dateinamen durch
- ‚die Zeichenfolge {neu} ersetzt wird.
- ‚Beispiel:
- ’set alt=0000
- ’set neu=-2008
- ‚Die Datei 12340000.jpg wird auf 1234-2008.jpg umbenannt.
- ‚Die Datei 9970000.jpg wird auf 976-2008.jpg umbenannt.
- ‚Die folgende Einstellungen müssen weiter unten vorgenommen werden
- ‚Const sTyp = „jpg“ ‚Dateityp. Z.B. jpg für Bilderdateien
- ‚Const sOne = „0000“ ‚Ursprüngliche Zeichenfolge
- ‚Const sTwo = „2008“ ‚Gewünschte Zeichenfolge
- ‚Const SubDir = False ‚True=Unterverzeichnisse bearbeiten, False=Unterverzeichnisse nicht bearbeiten
- ‚Datein werden nicht umbenannt, falls eine gleichnamige Datei schon existiert.
- ‚————————————————
- Option Explicit
- ‚——————————————–
- ‚Lokale Anpassungen
- ‚——————————————–
- Const sTyp = „jpg“ ‚Dateityp. Z.B. jpg für Bilderdateien
- Const sOne = „0000“ ‚Ursprüngliche Zeichenfolge
- Const sTwo = „2008“ ‚Gewünschte Zeichenfolge
- Const SubDir = False ‚True=Unterverzeichnisse bearbeiten, False=Unterverzeichnisse nicht bearbeiten
- Dim objFSO, objWshShell, objWMIService
- Dim CurrFolder, sOne_, Active, verb1, verb2, count
- ‚——————————————–
- ‚Ein paar Deklarationen
- ‚——————————————–
- Set objFSO = CreateObject(„Scripting.FileSystemObject“)
- Set objWshShell = WScript.CreateObject(„WScript.Shell“)
- Set objWMIService = GetObject(„winmgmts:\\.\root\cimv2“)
- CurrFolder = objWshShell.CurrentDirectory
- ‚—————————————————
- ‚Den Benutzer fragen, ob der Probelauf erwünscht ist
- ‚—————————————————
- Select Case MsgBox(„Dateien gleich umbenennen?“ _
- & “ (keinen Probelauf)“, 259, „Massen-Umbenennung von Dateien“)
- Case 6: Active = True
- Case 7: Active = False
- Case Else: WScript.Quit ‚Programm beenden
- End Select
- ‚—————————————————
- ‚Ein paar Sachen vorbereiten
- ‚—————————————————
- If Active Then
- verb1 = “ umbenannt auf „
- verb2 = “ Dateien wurden umbenannt.“
- Else
- verb1 = “ umbenennen auf „
- verb2 = “ Dateien würden umbenannt.“
- End If
- ‚—————————————————
- ‚Subroutine zur Umbenennung aufrufen
- ‚—————————————————
- count = 0
- sOne_ = UCase(sOne)
- ProcessFolder CurrFolder ‚Invoke the recursive rename program
- ‚—————————————————
- ‚Schlussbericht erstellen
- ‚—————————————————
- MsgBox (count & verb2)
- ‚============================
- ‚Subroutine
- ‚============================
- Sub ProcessFolder(FolderName)
- ‚———————-
- ‚Ein paar Deklarationen
- ‚———————-
- Dim objFile, objFolder, colFiles, colSubfolders, objF, FullName, p
- Set colFiles = objWMIService.ExecQuery _
- („ASSOCIATORS OF {Win32_Directory.Name='“ & FolderName & „‚} Where „ _
- & „ResultClass = CIM_DataFile“)
- ‚————————————
- ‚Eine Datei nach der andern behandeln
- ‚————————————
- For Each objFile In colFiles
- If objFile.Extension = sTyp Then ‚Bloss den richtigen Dateityp behandeln
- p = InStr(UCase(objFile.FileName), sOne_)
- If p > 0 Then
- FullName = FolderName & „\“ & objFile.FileName & „.“ & objFile.Extension
- WScript.Echo „Datei „ & FullName & verb1 & Replace(objFile.FileName, sOne, sTwo, 1, 1, 1) & „.“ & sTyp
- count = count + 1
- If Active Then
- Set objF = objFSO.GetFile(FullName)
- objF.Name = Replace(objFile.FileName, sOne, sTwo, 1, 1, 1) & „.“ & sTyp
- End If
- End If
- End If
- Next
- ‚————————————————————————-
- ‚Das Programm rekursiv aufrufen, falls Unterordner behandelt werden sollen
- ‚————————————————————————-
- if not SubDir then Exit Sub
- Set colSubfolders = objWMIService.ExecQuery _
- („Associators of {Win32_Directory.Name='“ & FolderName & „‚} „ _
- & „Where AssocClass = Win32_Subdirectory „ _
- & „ResultRole = PartComponent“)
- For Each objFolder In colSubfolders
- ProcessFolder objFolder.Name
- Next
- End Sub
http://faq-o-matic.net/?p=738



Kategorie:
Translate EN