suche Batch für Windows XP, das alle Dateinamen in Kleinschreibung umbenennt
Suche für einen Rechnern eine Batch-Automatisierung...
Suche ein Batch für Windows XP, das mir ab einem Ordner,
inkl. in allen Unterordnern,
alle Dateinamen in Kleinschreibung umbenennt,
dabei Umlaute und
"ß" durch ss
"Ä" und "ä" durch ae,
"Ö" und "ö" durch oe,
"Ü" und "ü" durch ue,
Leerzeichen durch _ (Unterstrich),
"-" durch _ (Unterstrich),
"(" und ")" durch _ (Unterstrich) ersetzt
inkl. in allen Unterordnern,
alle Dateinamen in Kleinschreibung umbenennt,
dabei Umlaute und
"ß" durch ss
"Ä" und "ä" durch ae,
"Ö" und "ö" durch oe,
"Ü" und "ü" durch ue,
Leerzeichen durch _ (Unterstrich),
"-" durch _ (Unterstrich),
"(" und ")" durch _ (Unterstrich) ersetzt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 17.11.2009 um 21:10:18 Uhr
Eigentlich hätte ich ja den Beitragsersteller noch fragen müssen, ob er als nun zufriedener Kunde nicht noch eine Kleinigkeit vergessen hat.
Aber da dieser Thread schon viel zu viele OffTopic-Passagen hat, setze ich mal schweigend den Beitrag auf "Gelöst.".
Aber da dieser Thread schon viel zu viele OffTopic-Passagen hat, setze ich mal schweigend den Beitrag auf "Gelöst.".
Content-Key: 129497
Url: https://administrator.de/contentid/129497
Ausgedruckt am: 28.03.2024 um 21:03 Uhr
23 Kommentare
Neuester Kommentar
Auch dir eine nette Begrüßungszeile vor den Latz geknallt
Das wird mit Bätsch nix und wie es mit VBS funktioniert - dazu einfach mal die Forensuche benutzen.
ps: +1 anspruchsvoll - war ein Versehen meinerseits.
Und Biber & ne Boomtown Rats haben mal wieder immer Montags - vollkommen recht...
Das wird mit Bätsch nix und wie es mit VBS funktioniert - dazu einfach mal die Forensuche benutzen.
ps: +1 anspruchsvoll - war ein Versehen meinerseits.
Und Biber & ne Boomtown Rats haben mal wieder immer Montags - vollkommen recht...
Mal ungetestet:
Die Liste msut du halt selbst fertig machen
@echo off
chcp 1252 >NUL
set "Root=C:\Ordner"
FOR /F "delims=" %%i in ('dir /b /s "%root%"\*.*') do call:umbenennen "%%i"
goto:eof
:umbenennen
set "Filename=%~1"
set "Filename=%Filename:ö=oe%"
set "Filename=%Filename:ä=ae%"
set "Filename=%Filename:ü=ue%"
rem unsd so weiter ...
ren "%~f1" "%Filename%"
goto:eof
Zwar, wie von miniversum gezeigt, per Batch machbar, aber besser (zumindest hinsichtlich ev weiterer Sonderzeichen) mit VBS:
Zum Testen mit
von der Kommandozeile starten, später dann die Zeile 24 entfernen oder durch vorangestelltes Apostroph auskommentieren und im Gegenzug Zeile 25 durch Entfernen des Kommentarzeichens aktivieren.
Derzeit nicht berücksichtigt ist die Möglichkeit, dass durch das Umbenennen in einem Ordner gleichnamige Dateien entstünden ...
This greeting intentionally left blank
Ordner = "D:\Test"
Von = Split(" |-|(|)|ß|ä|ö|ü", "|")
Nach = Split("_|_|_|_|ss|ae|oe|ue", "|")
V = UBound(Von)
If UBound(Nach) <> V Then
WScript.Echo "Ersetzungstabellen nicht korrekt!"
WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")
ProcessFolder fso.GetFolder(Ordner)
WScript.Echo vbCrLF & "Fertig."
Sub ProcessFolder(ThisFolder)
If InStr(ThisFolder.Path, "System Volume Information") = 0 Then
For Each File In ThisFolder.Files
Alt = File.Name
Neu = LCase(Alt)
For i = 0 To V
Neu = Replace(Neu, Von(i), Nach(i))
Next
WScript.Echo File.Path & vbTab & "-->" & vbTab & Neu
'File.Name = Neu
Next
For Each Folder In fso.GetFolder(ThisFolder).SubFolders
ProcessFolder Folder
Next
End If
End Sub
cscript //nologo Scriptname.vbs
Derzeit nicht berücksichtigt ist die Möglichkeit, dass durch das Umbenennen in einem Ordner gleichnamige Dateien entstünden ...
This greeting intentionally left blank
<OT>
Moin bastla,
Eigentlich hättest du sogar in dem Code-Kästchen schreiben müssen:
@UZehnder
Wenn nicht schon so viele geantwortet hätten, dann hätte ich dir gezeigt, dass auch ein Blick aus dem Papierkorb neue Perspektiven bieten kann.
Poste bitte nie wieder montags so kurz angebunden.
Grüße
Biber
</OT>
Moin bastla,
Eigentlich hättest du sogar in dem Code-Kästchen schreiben müssen:
' Hier hätte eine Lösung für dich stehen können.
@UZehnder
Wenn nicht schon so viele geantwortet hätten, dann hätte ich dir gezeigt, dass auch ein Blick aus dem Papierkorb neue Perspektiven bieten kann.
Poste bitte nie wieder montags so kurz angebunden.
Grüße
Biber
</OT>
[OT]
@Biber
Stimmt - aber ich lass mir doch (auch am Montag ) nicht den Spaß am Scripten verderben ...
Grüße
bastla
[/OT]
@Biber
Eigentlich hättest du sogar in dem Code-Kästchen schreiben müssen:
' Hier hätte eine Lösung für dich stehen können.
Grüße
bastla
[/OT]
Servus,
Da bleibt mir doch nichts anderes zu schreiben, als besser kann man es nicht sagen/schreiben.
@bastla:
"Dort" solltest du dann auch mal was dazu schreiben - wenns sein muß in Code Blöcken und jeweils ein Rem davor
Gruß
Zitat von @TsukiSan:
moin@bastla,
wieder mal ein sauberes Script von dir!
Vielen Dank!
Tsuki
Ps.: ich hoffe, der Fragestellende weiß das zu schätzen und editiert sein Frage noch etwas.
moin@bastla,
wieder mal ein sauberes Script von dir!
Vielen Dank!
Tsuki
Ps.: ich hoffe, der Fragestellende weiß das zu schätzen und editiert sein Frage noch etwas.
Da bleibt mir doch nichts anderes zu schreiben, als besser kann man es nicht sagen/schreiben.
@bastla:
Stimmt - aber ich lass mir doch (auch am Montag ) nicht den Spaß am Scripten verderben ...
Und ich hab deinen Beitrag auch in den reingetan."Dort" solltest du dann auch mal was dazu schreiben - wenns sein muß in Code Blöcken und jeweils ein Rem davor
Gruß
Servus,
auf die Gefahr, dass du auch meine Potenz ansehn willst und ich keinen 5 Öhre Schlitz am Bildschirm hab...
1) wird aber arg kompliziert und magst du mal ein Beispiel nennen - wo das Sinn ergibt?
2) wie jetzt alle oder nicht alle - bzw. dort wo kein Umlaut - kein renamsen.
3) rename <> copy es gibt doch nur eine Datei... warum sollte die aufwärts gezählt werden?
und wenn das wirklich wichtig ist - mach einen anderen Thread dazu auf
Gruß
auf die Gefahr, dass du auch meine Potenz ansehn willst und ich keinen 5 Öhre Schlitz am Bildschirm hab...
1) wird aber arg kompliziert und magst du mal ein Beispiel nennen - wo das Sinn ergibt?
2) wie jetzt alle oder nicht alle - bzw. dort wo kein Umlaut - kein renamsen.
3) rename <> copy es gibt doch nur eine Datei... warum sollte die aufwärts gezählt werden?
und wenn das wirklich wichtig ist - mach einen anderen Thread dazu auf
Gruß
Hallo UZehnder!
Unter teilweiser Vorwegnahme der Antworten könnte das etwa so aussehen:
Grüße
bastla
Wär es nicht möglich,
1. event. nur die DateiNamen ohne die Extension zu behandeln
Wäre möglich, wobei mich einigermaßen wundert, dass bei Euch tatsächlich (Office-)Datei-Extensions mit Umlauten oder den anderen genannten Sonderzeichen existieren ...1. event. nur die DateiNamen ohne die Extension zu behandeln
2. nur die Dateien umzubenamsen, die einer Ersetzung gemäss Ersetzungstabelle bedürfen
Also doch nicht generelle Kleinschreibung? Ansonsten wird ja ohnehin nix geändert, wenn nix zu ändern ist ...3. diesen beim renamen am DateiNamen-Ende eine fortlaufende Nummerierung+dieweilige Extension anzuhängen (wie "DateiNamen.0001.ext")?
Diese Nummerierung soll sich vermutlich auf den jeweils bearbeiteten Ordner beziehen - reichen die 4 Stellen dafür? Unter teilweiser Vorwegnahme der Antworten könnte das etwa so aussehen:
Ordner = "D:\Test"
Von = Split(" |-|(|)|ß|Ä|ä|Ö|ö|Ü|ü", "|")
Nach = Split("_|_|_|_|ss|Ae|ae|Oe|oe|Ue|ue", "|")
V = UBound(Von)
If UBound(Nach) <> V Then
WScript.Echo "Ersetzungstabellen nicht korrekt!"
WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")
ProcessFolder fso.GetFolder(Ordner)
WScript.Echo vbCrLF & "Fertig."
Sub ProcessFolder(ThisFolder)
Path = ThisFolder.Path
If InStr(Path, "System Volume Information") = 0 Then
Nummer = 10001
For Each File In ThisFolder.Files
Alt = File.Name
Ext = "." & fso.GetExtensionName(Alt)
If Ext = "." Then Ext = ""
Neu = fso.GetBaseName(Alt)
For i = 0 To V
Neu = Replace(Neu, Von(i), Nach(i))
Next
If Neu & Ext <> Alt Then
Neu = LCase(Neu) & "." & Right(Nummer, 4) & LCase(Ext)
WScript.Echo File.Path & vbTab & "-->" & vbTab & Neu
'File.Name = Neu
Nummer = Nummer + 1
End If
Next
For Each Folder In fso.GetFolder(ThisFolder).SubFolders
ProcessFolder Folder
Next
End If
End Sub
bastla
Hallo UZehnder!
Noch nicht eindeutig war für mich, ob nun die Extensions (außer auf Kleinschreibung) geändert werden sollen - daher werden diese weiterhin ausgespart.
Ansonsten etwa so:
Grüße
bastla
Noch nicht eindeutig war für mich, ob nun die Extensions (außer auf Kleinschreibung) geändert werden sollen - daher werden diese weiterhin ausgespart.
Ansonsten etwa so:
Ordner = "D:\Test"
Von = Split(" |-|(|)|ß|ä|ö|ü", "|")
Nach = Split("_|_|_|_|ss|ae|oe|ue", "|")
V = UBound(Von)
If UBound(Nach) <> V Then
WScript.Echo "Ersetzungstabellen nicht korrekt!"
WScript.Quit
End If
Set fso = CreateObject("Scripting.FileSystemObject")
ProcessFolder fso.GetFolder(Ordner)
WScript.Echo vbCrLF & "Fertig."
Sub ProcessFolder(ThisFolder)
If InStr(Path, "System Volume Information") = 0 Then
Nummer = 10001
For Each File In ThisFolder.Files
Alt = File.Name
Ext = "." & LCase(fso.GetExtensionName(Alt))
If Ext = "." Then Ext = ""
AltName = LCase(fso.GetBaseName(Alt))
Neu = AltName
For i = 0 To V
Neu = Replace(Neu, Von(i), Nach(i))
Next
If Neu & Ext <> Alt Then
If Neu <> AltName Then
Neu = Neu & "." & Right(Nummer, 4)
Nummer = Nummer + 1
End If
Neu = Neu & Ext
WScript.Echo File.Path & vbTab & "-->" & vbTab & Neu
'File.Name = Neu
End If
Next
For Each Folder In fso.GetFolder(ThisFolder).SubFolders
ProcessFolder Folder
Next
End If
End Sub
bastla
Hallo UZehnder!
Füge unmittelbar vor Zeile 35 folgende Zeile ein:
Leider hatte ich nur anhand der Ausgabe getestet (und das Script nicht wirklich umbenennen lassen ) - dadurch war mir entgangen, dass VBS offensichtlich ein Problem damit hat, eine Datei auf den gleichen Namen (nur eben durchgängig in Kleinbuchstaben) umzubenennen (was BTW per Batch problemlos funktioniert).
Als Workaround wird mit der obigen Zeile zunächst eine temporäre Änderung (unter Verwendung einer Zufallszahl) und erst dann die endgültige Namensvergabe vorgenommen.
Grüße
bastla
Füge unmittelbar vor Zeile 35 folgende Zeile ein:
Z = Int(Rnd*10000+10000): File.Name = Neu & Z
Als Workaround wird mit der obigen Zeile zunächst eine temporäre Änderung (unter Verwendung einer Zufallszahl) und erst dann die endgültige Namensvergabe vorgenommen.
Grüße
bastla
Hmmm, tja,
eigentlich wollte ich ja gar nicht das letzte Wort in diesem Beitrag an mich reißen.
Sondern nur den Beitrag noch auf "Erledigt" setzen, aber dann...
@bastla
Zwei Anmerkungen/Nachfragen zu dem Schnipsel:
a) wenn der Dateiname zuerst auf LCase() gebracht wird, reduziert sich die Konvertierungstabelle auf
Jezz' nicht nur wegen Geschwindigkeitstuning, mehr wegen Wartbarkeit...
b) Weil es mir ja doch keine Ruhe lässt, wenn ich nicht frage:
?? Was ist der Grund für das "...+10000" in der Z-Berechnungszeile? Nur ästhetische Erwägungen/einheitlch nochmal 5 Zeichen anhängen?
Grüße
Biber
[Edit 22:05] Thx @bastla
Alle Fragen beantwortet.
@ TypeLib/GUID -----> *lach*
Nich' mit Melonen auf Spätzle hauen oder so heißt es doch...
[/Edit]
eigentlich wollte ich ja gar nicht das letzte Wort in diesem Beitrag an mich reißen.
Sondern nur den Beitrag noch auf "Erledigt" setzen, aber dann...
@bastla
Zwei Anmerkungen/Nachfragen zu dem Schnipsel:
a) wenn der Dateiname zuerst auf LCase() gebracht wird, reduziert sich die Konvertierungstabelle auf
...
Von = Split(" |-|(|)|ß|ä|ö|ü", "|")
Nach = Split("_|_|_|_|ss|ae|oe|ue", "|")
...
b) Weil es mir ja doch keine Ruhe lässt, wenn ich nicht frage:
Füge unmittelbar vor Zeile 35 folgende Zeile ein:
Z = Int(Rnd*10000+10000):
?? Sind da jetzt nicht zwei Zähler im umbenamsten Dateinamen (einer von Nummer, einer von Z) ??Z = Int(Rnd*10000+10000):
?? Was ist der Grund für das "...+10000" in der Z-Berechnungszeile? Nur ästhetische Erwägungen/einheitlch nochmal 5 Zeichen anhängen?
Grüße
Biber
[Edit 22:05] Thx @bastla
Alle Fragen beantwortet.
@ TypeLib/GUID -----> *lach*
Nich' mit Melonen auf Spätzle hauen oder so heißt es doch...
[/Edit]
@Biber
zu a)
War in der letzten Fassung (nachdem geklärt war, dass auf jeden Fall die Kleinbuchstabenvariante umgesetzt werden soll) schon wieder so enthalten - zwischendurch ging's allerdings nicht anders ...
zu b)
Aus reiner Panik (hatte ich für vor dem Abendessen nicht einkalkuliert gehabt) entstanden ...
... und
war mir zu dem Zeitpunkt leider noch nicht bekannt.
Grüße
bastla
zu a)
War in der letzten Fassung (nachdem geklärt war, dass auf jeden Fall die Kleinbuchstabenvariante umgesetzt werden soll) schon wieder so enthalten - zwischendurch ging's allerdings nicht anders ...
zu b)
Aus reiner Panik (hatte ich für vor dem Abendessen nicht einkalkuliert gehabt) entstanden ...
?? Sind da jetzt nicht zwei Zähler im umbenamsten Dateinamen (einer von Nummer, einer von Z) ??
Ja - aber nicht lang ; das Problem waren nicht die mit Zählern versehenen (und damit ohnehin schon veränderten Dateinamen), sondern die Tatsache, dass ein Umbenennen von zB "Text.txt" nach "text.txt" den von UZehnder genannten Fehler liefert - daher musste für Sekundenbruchteile ein anderer Name her, der dann wieder auf das eigentlich gewünschte Ergebnis geändert werden konnte.?? Was ist der Grund für das "...+10000" in der Z-Berechnungszeile? Nur ästhetische Erwägungen/einheitlch nochmal 5 Zeichen anhängen?
Genau wie Du es vermutest: Ich wollte mit dem "+10000" die 5-Stelligkeit erreichen (vermutlich hätten's auch 2 Stellen getan - schließlich wird die Zahl ja an die Extension angefügt - aber da andererseits Dateitypen mit Umlauten und Wer-weiß-was nicht ausgeschlossen wurden, wollte ich nicht knausern) ...... und
Set TypeLib = CreateObject("Scriptlet.TypeLib")
Z = TypeLib.Guid
Grüße
bastla
Servus,
bitte nicht....so egoistisch sein...
Deine Frage war - suche Batch für Windows XP, das alle Dateinamen in Kleinschreibung umbenennt
Bastla hat zwar keine Batch abgeliefert, aber dafür war Miniversum so frei, dir ne Batch zu zimmern.
Nun kommt eine "ähnliche" Anforderung - und wer weiß das? . nur die - die diesen Fred kennen oder andere, die Ihn später mal finden.
Und nu? komplett andere Baustelle ist es ja nicht - kann Mann viel lernen aus deinen Script's.... Frau auch? man[n] man[n] man[n]
N8.
bitte nicht....so egoistisch sein...
Deine Frage war - suche Batch für Windows XP, das alle Dateinamen in Kleinschreibung umbenennt
Bastla hat zwar keine Batch abgeliefert, aber dafür war Miniversum so frei, dir ne Batch zu zimmern.
Nun kommt eine "ähnliche" Anforderung - und wer weiß das? . nur die - die diesen Fred kennen oder andere, die Ihn später mal finden.
Und nu? komplett andere Baustelle ist es ja nicht - kann Mann viel lernen aus deinen Script's.... Frau auch? man[n] man[n] man[n]
und wenn das wirklich wichtig ist - mach einen anderen Thread dazu auf
WLKIKIVN8.