Sonderzeichen aus Datei- u. Ordnernamen entfernen bzw. ersetzen per bat o. vbs
Schön guten Tag,
zur zeit Arbeiten wir auf unserem Eigenen Server, dieser wird aber von einem Fremdunternehmen, welches uns bald im Zielbetrieb übernimmt vereinnahmt und auf deren Server kopiert.
Jetzt das Problem: Auf dem neuen Server können nur Daten gespeichert werden die keine Sonderzeichen oder Leerzeichen enthalten. Alles was nicht bis zur Übernahme umbenannt ist verschwindet einfach...
Ich muss also die über 4 Mio. Dateien und Ordner umbenennen, bin aber nicht sehr begabt mit VBScript bzw. mit Batch! Es können auch keine Tool genutzt werden, da wir schon zum Teil übernommen sind ist mir dies nicht mehr Möglich... Müsste Quasi auch das Script per Hand abschreiben um es ins System zu bekommen.
zur zeit Arbeiten wir auf unserem Eigenen Server, dieser wird aber von einem Fremdunternehmen, welches uns bald im Zielbetrieb übernimmt vereinnahmt und auf deren Server kopiert.
Jetzt das Problem: Auf dem neuen Server können nur Daten gespeichert werden die keine Sonderzeichen oder Leerzeichen enthalten. Alles was nicht bis zur Übernahme umbenannt ist verschwindet einfach...
Ich muss also die über 4 Mio. Dateien und Ordner umbenennen, bin aber nicht sehr begabt mit VBScript bzw. mit Batch! Es können auch keine Tool genutzt werden, da wir schon zum Teil übernommen sind ist mir dies nicht mehr Möglich... Müsste Quasi auch das Script per Hand abschreiben um es ins System zu bekommen.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 27.10.2009 um 21:31:51 Uhr
Verschoben von "Netzwerküberwachung und Protokolle" nach "Batch & Shell".
(da wird es vielleicht vom nächsten Suchenden besser gefunden)
(da wird es vielleicht vom nächsten Suchenden besser gefunden)
Content-ID: 128037
Url: https://administrator.de/contentid/128037
Ausgedruckt am: 15.11.2024 um 14:11 Uhr
3 Kommentare
Neuester Kommentar
dir könnte dieses Replace-Script helfen
Gruß
Tsuki
on error resume next
Dim FilterStr , PfadStr
Dim PfadStrNeu, DateiNameNeu
Dim Alt, Neu
Dim MyText()
Dim X , ZX
Dim ZMAx
FilterStr = "*.*"
X = 0
ZMax = 0
LogPath = "D:\Replace.txt"
FN = ""
FNR = ""
vbTextCompare = 1
Set objWord = CreateObject("Word.Application")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set MyLogFile = FSO.CreateTextFile(LogPath, TRUE)
MyLogFile.Close
PfadStr = inputbox("Bitte den kompletten Pfad zu dem zu durchsuchenden Ordner eingeben.","Pfadangabe...","D:\1\")
PfadStrNeu = PfadStr & "ReplacedFiles\"
FSO.CreateFolder(PfadStrNeu)
Alt = inputbox("Bitte die zu ersetzende Zeichenkette eingeben...", "Alte Zeichenkette...", "ä")
Neu = inputbox("Bitte die neue Zeichenkette eingeben...", "Neue Zeichenkette...", "ae")
msgbox "Befehl wird ausgeführt! Bitte warten!",,"Mit Word...."
objWord.FileSearch.FileName = FilterStr
objWord.FileSearch.LookIn = PfadStr
objWord.FileSearch.SearchSubfolders = False
objWord.FileSearch.Execute
objWord.Visible = False
Set MyLogFile = FSO.OpenTextFile(LogPath, 8)
MyLogFile.WriteLine (Time & "|Beginne Script: 'Replace_Strings_in_gesamten_Ordner.vbs'")
For Each objFile in objWord.FileSearch.FoundFiles
MyLogFile.WriteLine (Time & "| Oeffne Datei: " & ObjFile)
'Jetzt holen wir uns nur den Dateinamen raus
FN = ""
FNR = ""
IFN = ""
IFNR = ""
for IFN = len(Objfile) to 0 Step -1
FNTemp = mid (Objfile,IFN,1)
If Not FNTemp = "\" then FN = FN & FNTemp
If FNTemp = "\" Then IFN = 0
next
'Hier wieder richtig rum drehen ;-)
for IFNR = len(FN) to 1 Step -1
FNTempR = mid (FN,IFNR,1)
FNR = FNR & FNTempR
next
ZMAx = 0
Set MyDatei = FSO.OpenTextFile(objFile, 1)
Do Until MyDatei.AtEndOfStream
TempText = MyDatei.ReadLine
ZMAx = Zmax + 1
Loop
MyDatei.close
ReDim MyText(ZMax)
Set MyDatei = FSO.OpenTextFile(objFile, 1)
Do Until MyDatei.AtEndOfStream
MyText(X) = MyDatei.ReadLine
Tsuki = InStr(1,MyText(X), ALT, vbTextCompare)
ZX = X
If ZX < 10 then ZX = "0" & ZX
If ZX < 100 then ZX = "0" & ZX
IF Tsuki > 0 Then
MyLogFile.WriteLine (Time & "| Zeile " & ZX & ": [" & ALT & "] ersetzt durch [" & Neu & "]")
End If
MyText(X) = Replace(MyText(X), Alt, Neu)
X = X + 1
Loop
MyDatei.close
PfadNeu = PfadStrNeu & FNR
MyLogFile.WriteLine (Time & "|Schreibe Datei: " & PfadNeu)
Set MyDatei1 = FSO.CreateTextFile(PfadNeu, TRUE)
MyDatei1.Close
Set MyDatei1 = FSO.OpenTextFile(PfadNeu, 8)
for I = 0 to (X - 1)
MyDatei1.WriteLine (MyText(I))
next
MyDatei1.Close
X = 0
Next
MyLogFile.WriteLine (Time & "| Beende Script: 'Replace_Strings_in_gesamten_Ordner.vbs'")
MyLogFile.Close
WScript.Echo Time & "| Script beendet."
objword.quit
Set objword = nothing
Set MyDatei = nothing
Set FSO = nothing
Gruß
Tsuki
Moin HGGIGO,
willkommen im Forum.
Okay, du solltest vorher das CMD-Fenster mit "mode con cols=166 lines=44" ein bisschen anpassen.
Zum Umbenennen der Dateien würde dieser (als Batch formatierte) Oneliner reichen:
Da der in der vorletzten virtuellen Zeile noch ein "ECHO ren" statt "ren" stehen hat, spielt der nur...
Demo:
Diese Skizze hat EINEN großen Vorteil gegenüber TsukiSans Ansatz:
und einen halben Vorteil hat es zusätzlich: Wenn du erst einmal mit "Echo ren.." statt "Ren" laufen lässt, dann hat du gleich eine Doku.
Nachteile:
Für <b>Ordner<b>- statt Dateinamen müsste eine leicht modifizierte Kopie der ersten Anweisung machbar sein.
Grüße
Biber
P.S. Übrigens gibt es unter Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern eine auch sehr nette Lösung von @pieh-ejdsch.
P.p.S. Falls jemand drüber stolpert, das [ren "d:\temp\testö mit Leerzeichen.xyz" "testömitLeerzeichen.xyz"] diese Zeile zweimal gefunden wird:
Es hat ja kein REName stattgefunden.... war ja nur Simulation mit ECHO...
willkommen im Forum.
. Müsste Quasi auch das Script per Hand abschreiben um es ins System zu bekommen.
Tja, rein vom Naturell her würde ich diesen Oneliner eigentlich direkt am CMD-Prompt eintippen...Okay, du solltest vorher das CMD-Fenster mit "mode con cols=166 lines=44" ein bisschen anpassen.
Zum Umbenennen der Dateien würde dieser (als Batch formatierte) Oneliner reichen:
:: ----snipp UmlautRen.bat ---
:: setlocal enableDelayedexpansion && REM falls bei euch nicht gesetzt
@echo off & FOR %%a in ("ä=ae" "ö=oe" "ü=ue" "ß=ss" " =") do (
FOR /f "tokens=1,2 delims==" %%y in ("%%~a") do (
FOR /R d:\temp %%i in ("*%%y*") do @(
Set "fileUml=%%~nxi"
ECHO ren "%%i" "!fileUml:%%~a!"
)))
Demo:
(=19:01:34 D:\temp=)
>e:\schnipsel\UmlautRen.bat
ren "d:\temp\Bi-Bär 2009-123456.pdf" "Bi-Baer 2009-123456.pdf"
ren "d:\temp\präfix.bla" "praefix.bla"
ren "d:\temp\Backup1\Admincopy\SendTo\E-Mail-Empfänger.MAPIMail" "E-Mail-Empfaenger.MAPIMail"
ren "d:\temp\Backup1\Admincopy\Startmenü\Programme\Zubehör\Programmkompatibilitäts-Assistent.lnk" "Programmkompatibilitaets-Assistent.lnk"
ren "d:\temp\Backup1\tsprofil\SendTo\E-Mail-Empfänger.MAPIMail" "E-Mail-Empfaenger.MAPIMail"
ren "d:\temp\Hein Blöd 2009-123456.pdf" "Hein Bloed 2009-123456.pdf"
ren "d:\temp\testö mit Leerzeichen.xyz" "testoe mit Leerzeichen.xyz"
ren "d:\temp\ÖÖÖö.txt" "oeoeoeoe.txt"
ren "d:\temp\ÖÖÖÖÖ.txt" "oeoeoeoeoe.txt"
ren "d:\temp\Backup1\Admincopy\SendTo\Desktop (Verknüpfung erstellen).DeskLink" "Desktop (Verknuepfung erstellen).DeskLink"
ren "d:\temp\Backup1\Admincopy\Startmenü\Programme\Remoteunterstützung.lnk" "Remoteunterstuetzung.lnk"
ren "d:\temp\Backup1\tsprofil\SendTo\Desktop (Verknüpfung erstellen).DeskLink" "Desktop (Verknuepfung erstellen).DeskLink"
ren "d:\temp\testö mit Leerzeichen.xyz" "testömitLeerzeichen.xyz"
....
Diese Skizze hat EINEN großen Vorteil gegenüber TsukiSans Ansatz:
- es werden nur die betroffenen Dateien (mit den definierten Sonderzeichen) angefasst - und nicht alle Dateien. ist etwas schneller.
und einen halben Vorteil hat es zusätzlich: Wenn du erst einmal mit "Echo ren.." statt "Ren" laufen lässt, dann hat du gleich eine Doku.
Nachteile:
- es wird (und kann nicht werden!) NICHT unterschieden zwischen Gross- und Kleinschreibung. Aus " Änderungsprotokoll" wird "aenderungsprotokoll" statt "Aenderungsprotokoll.
- es lässt sich vieles auch wieder zurückdrehen (aus ue wieder ü machen etc). Allerdings wird beim Zurückdrehen aus "Michael" ein "Michäl", aus Oldesloe wird Oldeslö.
Für <b>Ordner<b>- statt Dateinamen müsste eine leicht modifizierte Kopie der ersten Anweisung machbar sein.
Grüße
Biber
P.S. Übrigens gibt es unter Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern eine auch sehr nette Lösung von @pieh-ejdsch.
P.p.S. Falls jemand drüber stolpert, das [ren "d:\temp\testö mit Leerzeichen.xyz" "testömitLeerzeichen.xyz"] diese Zeile zweimal gefunden wird:
Es hat ja kein REName stattgefunden.... war ja nur Simulation mit ECHO...