Logo faq-o-matic.net
Logo faq-o-matic.net

Viele Dateien auf einmal umbenennen

von veröffentlicht am19. Januar 2008, 22:14 Uhr Kurzlink und Zitatlink einblenden
Kategorie Kategorie: Dateisystem, Scripting, Tools   Translate with Google Translate Translate EN   Die angezeigte Seite drucken

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

  1. ‚————————————————
  2. ‚Dieses Programm wird alle Dateien im gegenwärtigen Verzeichnis
  3. ‚umbenennen, indem die Zeichenfolge {alt} in den Dateinamen durch
  4. ‚die Zeichenfolge {neu} ersetzt wird.
  5. ‚Beispiel:
  6. ’set alt=0000
  7. ’set neu=-2008
  8. ‚Die Datei 12340000.jpg wird auf 1234-2008.jpg umbenannt.
  9. ‚Die Datei 9970000.jpg wird auf 976-2008.jpg umbenannt.
  10. ‚Die folgende Einstellungen müssen weiter unten vorgenommen werden
  11. ‚Const sTyp = „jpg“ ‚Dateityp. Z.B. jpg für Bilderdateien
  12. ‚Const sOne = „0000“ ‚Ursprüngliche Zeichenfolge
  13. ‚Const sTwo = „2008“ ‚Gewünschte Zeichenfolge
  14. ‚Const SubDir = False ‚True=Unterverzeichnisse bearbeiten, False=Unterverzeichnisse nicht bearbeiten
  15. ‚Datein werden nicht umbenannt, falls eine gleichnamige Datei schon existiert.
  16. ‚————————————————
  17. Option Explicit
  18. ‚——————————————–
  19. ‚Lokale Anpassungen
  20. ‚——————————————–
  21. Const sTyp = „jpg“ ‚Dateityp. Z.B. jpg für Bilderdateien
  22. Const sOne = „0000“ ‚Ursprüngliche Zeichenfolge
  23. Const sTwo = „2008“ ‚Gewünschte Zeichenfolge
  24. Const SubDir = False ‚True=Unterverzeichnisse bearbeiten, False=Unterverzeichnisse nicht bearbeiten
  25. Dim objFSO, objWshShell, objWMIService
  26. Dim CurrFolder, sOne_, Active, verb1, verb2, count
  27. ‚——————————————–
  28. ‚Ein paar Deklarationen
  29. ‚——————————————–
  30. Set objFSO = CreateObject(„Scripting.FileSystemObject“)
  31. Set objWshShell = WScript.CreateObject(„WScript.Shell“)
  32. Set objWMIService = GetObject(„winmgmts:\\.\root\cimv2“)
  33. CurrFolder = objWshShell.CurrentDirectory
  34. ‚—————————————————
  35. ‚Den Benutzer fragen, ob der Probelauf erwünscht ist
  36. ‚—————————————————
  37. Select Case MsgBox(„Dateien gleich umbenennen?“ _
  38.  & “ (keinen Probelauf)“, 259, „Massen-Umbenennung von Dateien“)
  39.  Case 6: Active = True
  40.  Case 7: Active = False
  41.  Case Else: WScript.Quit ‚Programm beenden
  42. End Select
  43. ‚—————————————————
  44. ‚Ein paar Sachen vorbereiten
  45. ‚—————————————————
  46. If Active Then
  47.  verb1 = “ umbenannt auf „
  48.  verb2 = “ Dateien wurden umbenannt.“
  49. Else
  50.  verb1 = “ umbenennen auf „
  51.  verb2 = “ Dateien würden umbenannt.“
  52. End If
  53. ‚—————————————————
  54. ‚Subroutine zur Umbenennung aufrufen
  55. ‚—————————————————
  56. count = 0
  57. sOne_ = UCase(sOne)
  58. ProcessFolder CurrFolder ‚Invoke the recursive rename program
  59. ‚—————————————————
  60. ‚Schlussbericht erstellen
  61. ‚—————————————————
  62. MsgBox (count & verb2)
  63. ‚============================
  64. ‚Subroutine
  65. ‚============================
  66. Sub ProcessFolder(FolderName)
  67. ‚———————-
  68. ‚Ein paar Deklarationen
  69. ‚———————-
  70.  Dim objFile, objFolder, colFiles, colSubfolders, objF, FullName, p
  71.  Set colFiles = objWMIService.ExecQuery _
  72.   („ASSOCIATORS OF {Win32_Directory.Name='“ & FolderName & „‚} Where „ _
  73.   & „ResultClass = CIM_DataFile“)
  74. ‚————————————
  75. ‚Eine Datei nach der andern behandeln
  76. ‚————————————
  77.  For Each objFile In colFiles
  78.   If objFile.Extension = sTyp Then ‚Bloss den richtigen Dateityp behandeln
  79.    p = InStr(UCase(objFile.FileName), sOne_)
  80.    If p > 0 Then
  81.     FullName = FolderName & „\“ & objFile.FileName & „.“ & objFile.Extension
  82.     WScript.Echo „Datei „ & FullName & verb1 & Replace(objFile.FileName, sOne, sTwo, 1, 1, 1) & „.“ & sTyp
  83.     count = count + 1
  84.     If Active Then
  85.      Set objF = objFSO.GetFile(FullName)
  86.      objF.Name = Replace(objFile.FileName, sOne, sTwo, 1, 1, 1) & „.“ & sTyp
  87.     End If
  88.    End If
  89.   End If
  90.  Next
  91. ‚————————————————————————-
  92. ‚Das Programm rekursiv aufrufen, falls Unterordner behandelt werden sollen
  93. ‚————————————————————————-
  94.  if not SubDir then Exit Sub
  95.  Set colSubfolders = objWMIService.ExecQuery _
  96.   („Associators of {Win32_Directory.Name='“ & FolderName & „‚} „ _
  97.   & „Where AssocClass = Win32_Subdirectory „ _
  98.   & „ResultRole = PartComponent“)
  99.  For Each objFolder In colSubfolders
  100.   ProcessFolder objFolder.Name
  101.  Next
  102. End Sub

© 2005-2019 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!