Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern
Hallo allerseits,
es gibt zwar schon eine Menge Beiträge um bestimmte Zeichen per Batchscript zu ersetzen, aber leider ist die Aufgabe für das Script, dass ich benötige, etwas komplexer und meine Erfahrungen mit Batch-Programmierung gehen gegen 0 :/
Das Batchscript muss folgendes können:
Innerhalb eines beliebigen Ordners (alternativ auch dem in dem es liegt) und allen darin befindlichen Unterordnern sowohl die Dateinamen als auch die Ordnernamen nach bestimmten zeichen durchsuchen und diese ersetzen.
Dabei sollen Leerzeichen durch einfache Unterstriche "_", Umlaute wie ä in ae, ß zu ss ersetzt, Klammern entfernt und Punkte/Kommata durch Unterstriche ersetzt werden. Bei den Punkten darf aber natürlich nicht der Punkt vor der Dateiendung entfernt werden. Ich weiss die Liste ist lang... und fragt mich bitte nicht wie man dazu kommt, Dateien so dermaßen be...scheiden zu benennen ;) Länge, Typ usw. ist von File zu File völlig verschieden, Ordner ebenso.
Ich habe schon versucht die Batchscripte aus einigen Beiträgen entsprechend zu modifizieren, aber so wirklich laufen wollen sie nicht
Ich hoffe ihr könnt mir da weiterhelfen.
mfg
es gibt zwar schon eine Menge Beiträge um bestimmte Zeichen per Batchscript zu ersetzen, aber leider ist die Aufgabe für das Script, dass ich benötige, etwas komplexer und meine Erfahrungen mit Batch-Programmierung gehen gegen 0 :/
Das Batchscript muss folgendes können:
Innerhalb eines beliebigen Ordners (alternativ auch dem in dem es liegt) und allen darin befindlichen Unterordnern sowohl die Dateinamen als auch die Ordnernamen nach bestimmten zeichen durchsuchen und diese ersetzen.
Dabei sollen Leerzeichen durch einfache Unterstriche "_", Umlaute wie ä in ae, ß zu ss ersetzt, Klammern entfernt und Punkte/Kommata durch Unterstriche ersetzt werden. Bei den Punkten darf aber natürlich nicht der Punkt vor der Dateiendung entfernt werden. Ich weiss die Liste ist lang... und fragt mich bitte nicht wie man dazu kommt, Dateien so dermaßen be...scheiden zu benennen ;) Länge, Typ usw. ist von File zu File völlig verschieden, Ordner ebenso.
Ich habe schon versucht die Batchscripte aus einigen Beiträgen entsprechend zu modifizieren, aber so wirklich laufen wollen sie nicht
Ich hoffe ihr könnt mir da weiterhelfen.
mfg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Kommentar vom Moderator Biber am 03.09.2009 um 13:08:51 Uhr
Titel geändert von "Batch Script für File- und Dir-namen" auf "Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern"
Grüße
Biber
Grüße
Biber
Content-ID: 124042
Url: https://administrator.de/contentid/124042
Ausgedruckt am: 24.11.2024 um 03:11 Uhr
24 Kommentare
Neuester Kommentar
Hi Chinatiger,
das ist ja mal eine richtig Fordernde Aufgabenstellung solche schönen Aufgaben müsste es hier viel mehr geben.
plaese Feedback
@45877
warum setzt Du so ein tool hier in den Batchbereich?
es geht hier um ne Batch und nicht so ein Klicktool
also bitte lenke nicht von den Anforderungen ab, welche hier gestellt werden.
ich hab mich mal drangesetzt hat zwar 1...2 Stunden gedauert aber es müsst so gehen ich habs getestet.
Es hat weniger mit Erfahrung zu tun als mit Lokig ranzugehen - wegen der UnterOrdner da ja nur die tiefsten zuerst umbenannt werden können also habe ich eine Vorsortierung der Unterordner nach Höchster Tiefe gemacht.
Die Codepage braucht nicht umgestellt zu werden.
Du kannst das Verzeichnis auf den Batch ziehen oder im Verzeichnis ausführen ist egal der Effekt ist der gleiche. Also auch ne Partition wenn es nicht den Variablencache sprengt.
Der Batch benennt dir erst alle UnterOrdner um und zwar zuerst den der in der tiefsten Verzeichnisstuktur ist .
sonst würde es nicht gehen.
Anschliesend alle Dateien.
erstmal zeigt dir der Batch an was er machen würde. wenn dass alles so passt entfernst Du das @echo ganz unten.
[Edit]
Habe den Code noch einmal ein bisschen angepasst
[/Edit]
Gruß Phil
[Edit Biber] 24.11.2009 Die weiter unten von Nostradamus2 wrwähnten Tippfehler berichtigt. [/Edit]
das ist ja mal eine richtig Fordernde Aufgabenstellung solche schönen Aufgaben müsste es hier viel mehr geben.
plaese Feedback
@45877
warum setzt Du so ein tool hier in den Batchbereich?
es geht hier um ne Batch und nicht so ein Klicktool
also bitte lenke nicht von den Anforderungen ab, welche hier gestellt werden.
ich hab mich mal drangesetzt hat zwar 1...2 Stunden gedauert aber es müsst so gehen ich habs getestet.
Es hat weniger mit Erfahrung zu tun als mit Lokig ranzugehen - wegen der UnterOrdner da ja nur die tiefsten zuerst umbenannt werden können also habe ich eine Vorsortierung der Unterordner nach Höchster Tiefe gemacht.
Die Codepage braucht nicht umgestellt zu werden.
Du kannst das Verzeichnis auf den Batch ziehen oder im Verzeichnis ausführen ist egal der Effekt ist der gleiche. Also auch ne Partition wenn es nicht den Variablencache sprengt.
Der Batch benennt dir erst alle UnterOrdner um und zwar zuerst den der in der tiefsten Verzeichnisstuktur ist .
sonst würde es nicht gehen.
Anschliesend alle Dateien.
erstmal zeigt dir der Batch an was er machen würde. wenn dass alles so passt entfernst Du das @echo ganz unten.
[Edit]
Habe den Code noch einmal ein bisschen angepasst
[/Edit]
::----schnipp---Unterordner-und-enthaltene-Dateien-Umbenamsen-fuer-CDVD.bat
:: Zum Anzeigen ist @echo vor den ren Befehlen eingefügt
:: dieses zum tatsächlichen Durchführen entfernen.
@echo off & setlocal
if "%~1"=="" (for /f "tokens=2,*" %%i in ('dir "''zxy." 2^>nul') do if "%%i"=="von" (set "pfad=%%~fj" )) else set "pfad=%~1"
PushD "%pfad%
set /a deep=0 , maxdeep=0 , mindeep=0 , subfold=0 , folders=0 , files=0 & set vfN=& set vmn=& set vdn=& set fNL=9& set "NL=9"
::Max Verzeichnistiefe festellen
set setdeep1=1
for /f "tokens=*" %%i in ('dir /a:d /b /s 2^>nul') do set "file=%%i" & set "foldername=%%i" & set deep=0& call :folderren
set "setdeep1="
if %folders% gtr 0 (
echo %folders% Ornder entsprechen den Kriterien!
if %mindeep% equ %maxdeep% (
for /f "tokens=1* delims==" %%a in ('set ... 2^>nul') do for /f "tokens=2* delims=?" %%i in ("%%b") do @echo ren "%%i" "%%j" & set "%%a="
goto :files
) else echo Ordner werden nach Tiefe sortiert!
) else echo Kein Ordner entspricht den Kriterien!
:testfzero
if %fNL% lss %folders% (
set "fNL=%fNL%9"
set "vfN=%vfN%0"
goto :testfZero
)
set "fNL=9"
:testmzero
if %NL% lss %maxdeep% (
set "NL=%NL%9"
set "vmn=%vmN%0"
goto :testmZero
)
::Verzeichnisse nach Tiefe sortieren und Vars setzen
for /f "tokens=1* delims==" %%a in ('set ... 2^>nul') do for /f "tokens=1* delims=?" %%i in ("%%b") do (
set /a bedeep=maxdeep-%%i
set "vdn=%vmN%"
set "NL=9"
set "file=%%j"
call :memfolds %%a
)
:: verzeichnisse Umbenennen tiefstes zuerst
for /f "tokens=1* delims==" %%a in ('set .. 2^>nul') do for /f "tokens=1* delims=?" %%i in ("%%b") do @echo ren "%%i" "%%j"
:: dateien Umbenennen
:files
for /f "tokens=*" %%i in ('dir /a:-d /b /s 2^>nul') do set "file=%%~dpni" & set "ext=%%~xi" & set "all=%%i" & call :folderren
echo %folders% Ornder %files% Dateien entsprachen den Kriterien.&pause& goto :eof
:memfolds
if %NL% lss %bedeep% (
set "NL=%NL%9"
set "vdn=%vdN:~1%"
goto :memfolds
)
set /a subfold+=1
set "..%vdN%%bedeep%%vfN%%subfold%=%file%"
if %fNL% equ %subfold% (
set "fNL=%fNL%9"
set "vfN=%vfN:~1%"
)
if defined %1 set "%1="
goto :eof
:folderren
if not "%file:*\=%" == "%file%" (
set "file=%file:*\=%"
if defined setdeep1 set /a deep+=1
goto :folderren
)
set "new= %file%"
:write
if "%~0"=="%all%" goto :eof
::UmlauteNormal
set "new=%new:ß=ss%"
set "new=%new:Ä=Ae%"
set "new=%new:Ö=Oe%"
set "new=%new:Ü=Ue%"
set "new=%new:ä=ae%"
set "new=%new:ö=oe%"
set "new=%new:ü=ue%"
::Umlautefalsch dargestellt Achtung! hier werden Umlaute am Wortanfang Gross
set "new=%new:á=ss%"
set "new=%new: Ž= Ae%"
set "new=%new: ™= Oe%"
set "new=%new: š= Ue%"
set "new=%new:„=ae%"
set "new=%new:”=oe%"
set "new=%new:=ue%"
set "new=%new:~1%"
::u-strich Klammer etc
set "new=%new: =_%"
set "new=%new:,=_%"
set "new=%new:(=%"
set "new=%new:)=%"
set "new=%new:.=%"
if "%file%"=="%new%" goto :eof
if not defined setdeep1 goto :ren
if not defined mindeep set "mindeep=%deep%"
if %deep% gtr %maxdeep% set "maxdeep=%deep%"
set /a folders+=1
set "...%folders%=%deep%?%foldername%?%new%"
goto :eof
:ren
set /a files+=1
:: Achtung!
::wenn alles so klappt wie es soll dann entferne: @echo.&@echo
@echo.&@echo ren "%all%" "%new%%ext%"
::----schnapp---Unterordner-und-enthaltene-Dateien-Umbenamsen-fuer-CDVD.bat
Gruß Phil
[Edit Biber] 24.11.2009 Die weiter unten von Nostradamus2 wrwähnten Tippfehler berichtigt. [/Edit]
Zitat von @pieh-ejdsch:
@45877
warum setzt Du so ein tool hier in den Batchbereich?
es geht hier um ne Batch und nicht so ein Klicktool also bitte lenke nicht von den Anforderungen ab,
welche hier gestellt werden.
@45877
warum setzt Du so ein tool hier in den Batchbereich?
es geht hier um ne Batch und nicht so ein Klicktool also bitte lenke nicht von den Anforderungen ab,
welche hier gestellt werden.
Nur mal zur Klarstellung: Solange ein Kommentar gegen keine Regel verstößt und ein Tipp verwendbar ist, darf hier immer noch jeder
schreiben, was er für richtig hält. Ob er das darf, hast du nicht zu entscheiden!
ich weiss ja nicht wie das bei dir ist, aber mein Arbeitgeber zahlt mir Geld. Und bevor ich mich zwei Stunden hinsetze und Batch schreibe, wenn ich das ganze auch für nen 10er fertig haben kann, dann sagt er "kauf das Ding" und mach fertig.
Aber wenn er jemand fin det der es ihm für umsonst macht, dann ist das natürlich auch schön...
Aber wenn er jemand fin det der es ihm für umsonst macht, dann ist das natürlich auch schön...
Hi,
ich habe aber bei den Filerenamer keinen Hinweis darauf bekommen ob dieser auch die Ordner Umbenennt.
daher habe ich es halt gemacht. und soll ich Dir noch sagen warum?
Mir macht es halt Spass und wenn der Batch dazu noch so funktioniert wie er soll, weiss man doch im Endeffekt wozu Batch alles in der Lage ist um Aufgaben zu erledigen.
Für mich sind 10 Euro auch geld!
Aber ich habe auch etwas mehr gelernt und die Anforderungen sind auch gewachsen.
Ich helfe immer gerne.
vllt könnte die Uberschrift vom Beitrag noch dementsprechend Umgeschrieben werden, wegen ersetzten von Zeichen in allen Unterordnern und enthaltenen Dateien.
Gruß Phil
wenn ich das ganze auch für nen 10er fertig haben kann, dann sagt er "kauf das Ding" und mach fertig.
Ja da magst Du ja Recht haben.ich habe aber bei den Filerenamer keinen Hinweis darauf bekommen ob dieser auch die Ordner Umbenennt.
daher habe ich es halt gemacht. und soll ich Dir noch sagen warum?
Mir macht es halt Spass und wenn der Batch dazu noch so funktioniert wie er soll, weiss man doch im Endeffekt wozu Batch alles in der Lage ist um Aufgaben zu erledigen.
Für mich sind 10 Euro auch geld!
Aber ich habe auch etwas mehr gelernt und die Anforderungen sind auch gewachsen.
Ich helfe immer gerne.
vllt könnte die Uberschrift vom Beitrag noch dementsprechend Umgeschrieben werden, wegen ersetzten von Zeichen in allen Unterordnern und enthaltenen Dateien.
Gruß Phil
Hallo,
das Script kam mir sehr gelegen und man kann schön sehen, was wirklich passiert.
Vielen Dank!
Aber ich musste noch Kleinigkeiten korrigieren:
In den Zeilen
fehlt das " am Ende. Das ergibt unschöne zusätzliche Leerzeichen in den umbenannten Dateien/Ordnern.
(Ein Übertragungsfehler?)
Und wozu diese Zeile
85. set "new=%new:~1%"
gut ist, hat sich mir leider nicht erschlossen - funktioniert soweit ohne...
Das nur als Hinweis, damit zukünftige Benutzer nicht lange nach den Fehlern suchen müssen.
Gruß,
M
[Edit Biber] Codetags nachgetragen, sonst wird vieles als Smiley dargestellt. [/Edit]
das Script kam mir sehr gelegen und man kann schön sehen, was wirklich passiert.
Vielen Dank!
Aber ich musste noch Kleinigkeiten korrigieren:
In den Zeilen
73. set "new=%new:Ü=Ue%
87.set "new=%new: =_%
88.set "new=%new:,=_%
89.set "new=%new:(=%
90.set "new=%new:)=%
91.set "new=%new:.=%
(Ein Übertragungsfehler?)
Und wozu diese Zeile
85. set "new=%new:~1%"
gut ist, hat sich mir leider nicht erschlossen - funktioniert soweit ohne...
Das nur als Hinweis, damit zukünftige Benutzer nicht lange nach den Fehlern suchen müssen.
Gruß,
M
[Edit Biber] Codetags nachgetragen, sonst wird vieles als Smiley dargestellt. [/Edit]
Hi Nostradamus,
das mit den abschliessenden Gänsefüschen werde ich noch fixen.
in Zeile 85. macht das set "new=%new:~1%"
das Leerzeichen, welches in Zeile 66. mit
set "new= %file%"
eingefügt wird um den Wortanfang groß zu schreiben. Das hatte den Hintergund, weil das ü ob groß oder klein immer so wie es zuerst umgeschrieben werden würde umgeschrieben worden ist. Daher hatte ich ein Leerzeichen vor den Ordnernamen gesetzt damit dieser Umlaut groß geschrieben wird. Danach wird eben dieses Leerzeichen wieder entfernt.
[Edit]
Hab grad mitbekommen, dass ich meinen alten Kommentar dahingehend nicht mehr bearbeiten kann.
vllt kann Biber die Gänsefüschen in den entsprechenden Zeilen anfügen.
[/Edit]
Gruß Phil
das mit den abschliessenden Gänsefüschen werde ich noch fixen.
in Zeile 85. macht das set "new=%new:~1%"
das Leerzeichen, welches in Zeile 66. mit
set "new= %file%"
eingefügt wird um den Wortanfang groß zu schreiben. Das hatte den Hintergund, weil das ü ob groß oder klein immer so wie es zuerst umgeschrieben werden würde umgeschrieben worden ist. Daher hatte ich ein Leerzeichen vor den Ordnernamen gesetzt damit dieser Umlaut groß geschrieben wird. Danach wird eben dieses Leerzeichen wieder entfernt.
[Edit]
Hab grad mitbekommen, dass ich meinen alten Kommentar dahingehend nicht mehr bearbeiten kann.
vllt kann Biber die Gänsefüschen in den entsprechenden Zeilen anfügen.
[/Edit]
Gruß Phil
Sehr schönes Batch, gibt da nur noch ein Problem - die Zeichen % sowie § werden nicht ersetzt, bei % ist mir klar warum nicht, beim § eher nicht. Kann man das % irgendwie Escapen?
So funktioniert es nicht: \% ;)
You're welcome.
So funktioniert es nicht: \% ;)
You're welcome.
Moin pieh- bzw. Raz0rs-ejdsch,
ich habe zwar keinen Grund gefunden, warum das Weg-Editieren der Tippfehlerchen in dem Schnipsel oben nicht funktionieren können sollte (gesperrt ist nix),
aber ich habe mal die von Nostradambruch gemeldeten Bugs berichtigt.
Mehr wollte ich da jetzt nicht eingreifen, weil... hmm, der Schnipsel oben wird sicherlich noch einige Verbesserungen/Erweiterungen bekommen im Praxiseinsatz, aber im Großen und Ganzen ist alles dabei, was vermutlich "überall" ersetzt bzw. übersetzt werden kann (mach mir ein X für ein U, mach mir ein "ue" für ein "ü"...)
Wenn jetzt noch (wie von Raz0rsEdge) Übersetzungen vermisst werden, dann doch schon eher spezielle und individuelle.
Okay, soll ja trotzdem passieren - ich wollte nur darauf hinaus, dass das hier gepostete Skript natürlich noch individuell erweitert werden kann/könnte, aber dass sicherlich auch pieh-ejdsch dankbar dafür wäre, wenn Ergänzungen/Erweiterungen hier gepostet werden und nicht "Upps, einer fehlt noch!"-Hinweise.
[[[ Mir beispielweise fehlt noch ein sauberer Abgang des Skripts (auch im Falle "Nix zu tun"), nämlich das Zurücksetzen des aktuellen Laufwerks/Pfads mit PopD.
Gesichert und gewechselt wird ja am Anfang mit PushD in das durchzunudelnde Verzeichnis, aber nie wieder zurückgesprungen ]]]
@13232
Zu deinen Fragen:
So wie in anderen Sprachen mit einem "\"-Backslash maskiert oder aber das Zeichen verdoppelt wird.
Zwei unsauber gelöste Grenzfälle sind das Anführungszeichen und das Prozentzeichen, die sich beide etwas gewöhnungsbedürftig verhalten bei Ersetzunganweisungen von Variableninhalten und auch als Optionen in FOR-Anweisungen.
ich empfehle, ein Prozentzeichen in einer Variablen zu ersetzen durch (kurzzeitige) Verwendung der "Setlocal EnableDelayed"-Anweisung.
Beispiel am CMD-Prompt
Grüße
Biber
ich habe zwar keinen Grund gefunden, warum das Weg-Editieren der Tippfehlerchen in dem Schnipsel oben nicht funktionieren können sollte (gesperrt ist nix),
aber ich habe mal die von Nostradambruch gemeldeten Bugs berichtigt.
Mehr wollte ich da jetzt nicht eingreifen, weil... hmm, der Schnipsel oben wird sicherlich noch einige Verbesserungen/Erweiterungen bekommen im Praxiseinsatz, aber im Großen und Ganzen ist alles dabei, was vermutlich "überall" ersetzt bzw. übersetzt werden kann (mach mir ein X für ein U, mach mir ein "ue" für ein "ü"...)
Wenn jetzt noch (wie von Raz0rsEdge) Übersetzungen vermisst werden, dann doch schon eher spezielle und individuelle.
Okay, soll ja trotzdem passieren - ich wollte nur darauf hinaus, dass das hier gepostete Skript natürlich noch individuell erweitert werden kann/könnte, aber dass sicherlich auch pieh-ejdsch dankbar dafür wäre, wenn Ergänzungen/Erweiterungen hier gepostet werden und nicht "Upps, einer fehlt noch!"-Hinweise.
[[[ Mir beispielweise fehlt noch ein sauberer Abgang des Skripts (auch im Falle "Nix zu tun"), nämlich das Zurücksetzen des aktuellen Laufwerks/Pfads mit PopD.
Gesichert und gewechselt wird ja am Anfang mit PushD in das durchzunudelnde Verzeichnis, aber nie wieder zurückgesprungen ]]]
@13232
Zu deinen Fragen:
- das "§" wird nicht ersetzt, weil es ähnlich wie "#" , "@" oder "[" zwar zu den eher ausgefallenen Zeichen gehört, aber eigentlich nie bei der Verarbeitung als Datei/Ordnername auffällig wird. Gib eine Ersetzungsregel an dafür und gut is'
- Wenn das %-Zeichen ersetzt werden soll, wird es wirklich etwas tricky.
So wie in anderen Sprachen mit einem "\"-Backslash maskiert oder aber das Zeichen verdoppelt wird.
Zwei unsauber gelöste Grenzfälle sind das Anführungszeichen und das Prozentzeichen, die sich beide etwas gewöhnungsbedürftig verhalten bei Ersetzunganweisungen von Variableninhalten und auch als Optionen in FOR-Anweisungen.
ich empfehle, ein Prozentzeichen in einer Variablen zu ersetzen durch (kurzzeitige) Verwendung der "Setlocal EnableDelayed"-Anweisung.
Beispiel am CMD-Prompt
set "DeutscherMeister2010=100% Werder"
REM Variableninhalt mit "%"
REM Verdoppeln des %-Zeichens und Maskieren mit Caret hilft nix beim Ersetzen:
>echo [%DeutscherMeister2010%] [%DeutscherMeister2010:%=_%]
[100% Werder] [%DeutscherMeister2010:%=_%]
>echo [%DeutscherMeister2010%] [%DeutscherMeister2010:^%=_%]
[100% Werder] [100% Werder]
(=20:03:55 D:\temp=)
>Setlocal enableDelayedExpansion & echo [%DeutscherMeister2010%] [!DeutscherMeister2010:%=_!]
[100% Werder] [100_ Werder] -----------> das Ersetzen hier klappt!
Grüße
Biber
Hiho Biber,
danke für den Tipp mit dem %-Zeichen, bei uns ist es leider so dass User auch gerne mal Dateien §7_GG_Auszug.pdf abspeichern daher habe ich einfach eine Ersatzregel für das §-Zeichen implementieren wollen, die Umsetzung scheiterte - sonst hätt ich mich ja nicht gemeldet.
Werd mal ein wenig rumexperimentieren mit dem maskieren.
danke für den Tipp mit dem %-Zeichen, bei uns ist es leider so dass User auch gerne mal Dateien §7_GG_Auszug.pdf abspeichern daher habe ich einfach eine Ersatzregel für das §-Zeichen implementieren wollen, die Umsetzung scheiterte - sonst hätt ich mich ja nicht gemeldet.
Werd mal ein wenig rumexperimentieren mit dem maskieren.
- raz0r
Moin Ratzer,
das Paragraphzeichen sollte keinerlei Problem machen im Filesystem (ist m.W. kein Sonderzeichen auch auf CDs) und auch keine Probleme beim 08/15-Ersetzen im Batch:
Proof of concept am CMD-Prompt (">" nicht mit eingeben)
Grüße
Biber
das Paragraphzeichen sollte keinerlei Problem machen im Filesystem (ist m.W. kein Sonderzeichen auch auf CDs) und auch keine Probleme beim 08/15-Ersetzen im Batch:
Proof of concept am CMD-Prompt (">" nicht mit eingeben)
(=21:51:29 D:\temp=)
>set "datei=§7_GG_Auszug.pdf"
(=21:51:40 D:\temp=)
>echo alt[%datei%] neu[%datei:§=_%]
alt[§7_GG_Auszug.pdf] neu[_7_GG_Auszug.pdf]
Grüße
Biber
Hi Biber,
das mit dem Bearbeiten des Kommentares funktioniert scheinbar nur noch beim jeweils letzten Kommentar bzw. wenn dieser noch net zu alt ist. KA warum aber der Bearbeiten Link fehlt in diesen Komments.
sorry, der Saubere Abgang mit PopD in Zeile 45. ist mir leider durch die Lappen gegangen
[OT]
derzeit kein DSL (1+1 die brauchen wieder mal ewig...) daher magere Antworten
[/OT]
Gruß Phil
das mit dem Bearbeiten des Kommentares funktioniert scheinbar nur noch beim jeweils letzten Kommentar bzw. wenn dieser noch net zu alt ist. KA warum aber der Bearbeiten Link fehlt in diesen Komments.
sorry, der Saubere Abgang mit PopD in Zeile 45. ist mir leider durch die Lappen gegangen
[OT]
derzeit kein DSL (1+1 die brauchen wieder mal ewig...) daher magere Antworten
[/OT]
Gruß Phil
Hallo und guten Morgen,
auf der Suche nach einem Programm oder Script, welches Umlaute in Ordner, Unterordner und Dateien ersetzt, bin ich hier angekommen. Das Umbenennen der Dateien funktioniert super, vielen Dank. Leider klappt es nciht bei den Ordnern. Ich bekomme zwar die Ausgabe: x Ordner entsprechen den Kriterien, aber sie werden leider nciht umbenannt.
Wäre sehr nett wenn mir jemand, der sich auskennt helfen würde.
Im Voraus besten Dank
Gruß Manfred
auf der Suche nach einem Programm oder Script, welches Umlaute in Ordner, Unterordner und Dateien ersetzt, bin ich hier angekommen. Das Umbenennen der Dateien funktioniert super, vielen Dank. Leider klappt es nciht bei den Ordnern. Ich bekomme zwar die Ausgabe: x Ordner entsprechen den Kriterien, aber sie werden leider nciht umbenannt.
Wäre sehr nett wenn mir jemand, der sich auskennt helfen würde.
Im Voraus besten Dank
Gruß Manfred
moin Manfred,
gar net geübersehen - zulange her...
ich habs nochmal ein bissel verfeinert mit Hilfe "/?" "/a" für Aktion und ein paar andere Optionen dazu
Gruß Phil
in Zeile 15 ...
ähm ja - das ist für die Ordnerumbenennung wenn keine Unterordner zum Umbenennen vorhanden sind . Ich schrub ja, dass erst der Tiefste umzubenennende Ordner umbenannt werden muss - sonst wird er innerhalb dieser Schleife nicht mehr gefunden. Daher diese Extra-Schleife - die hatte ich ich habs nochmal ein bissel verfeinert mit Hilfe "/?" "/a" für Aktion und ein paar andere Optionen dazu
::----schnipp---Unterordner-und-enthaltene-Dateien-Umbenamsen-fuer-CDVD.bat
@echo off & setlocal
:: Nicht erlaubt in Datei- und Verzeichnissnamen sind
:: \ / : * ? " < > |
set "Batch=%~0"
set "Anzeigen=@echo"
set "LZ=@echo.&"
set "s=/s"
if "%~1" == "/?" (
echo.&echo zeigt Verzeichnisse und UnterVerzeichnisse sowie deren Dateien mit:
echo Umlauten, Leerzeichen, Klammern, Kommata und Punkten an.
echo danach wird jeweils das Ergebnis der Umbenennung angezeigt.
echo.& echo Syntax:
echo %~n0 [Pfad\Ordnername] [/a] [/-s] [/d ^| /-d] [/u ^| /-u]
echo Wird der Parameter /a angebeben wird gleich umbenannt
echo mit Parameter /-s wird NICHT Rekursiv abgearbeitet
echo mit Parameter /d werden nur Ordner abgearbeitet
echo mit Parameter /-d werden nur Dateien abgearbeitet
echo mit Parameter /u werden die Umlaute NICHT einbezogen
echo mit Parameter /-u werden die Sonderzeichen Nicht einbezogen
goto :eof
)
if not "%~1"=="" (
for %%i in ( "%~1" "%~2" "%~3" "%~4" "%~5") do if not "%%~i" == "" (set "Opt=%%~i"
setlocal enabledelayedexpansion
if "!Opt:~0,1!" == "/" (endlocal
if "%%~i" == "/a" (set "Anzeigen="&set "LZ=")
if "%%~i" == "/-s" set "s="
if "%%~i" == "/d" if not defined f set "d=1"
if "%%~i" == "/-d" if not defined d set "f=1"
if "%%~i" == "/u" if not defined so set "u=1"
if "%%~i" == "/-u" if not defined u set "so=1"
) else (endlocal
if exist "%%~i\" set "pfad=%%~i"
) ) )
if not defined Pfad set "pfad=%cd%"
PushD "%pfad%"
set /a deep=0 , maxdeep=0 , mindeep=0 , subfold=0 , folders=0 , files=0 & set vfN=& set vmn=& set vdn=& set fNL=9& set "NL=9"
::Max Verzeichnistiefe festellen
if defined f goto :files
set setdeep1=1
for /f "tokens=*" %%i in ('dir /a:d /b %s% 2^>nul') do set "file=%%i" & set "foldername=%%i" & set deep=0& call :folderren
set "setdeep1="
if %folders% gtr 0 (
echo %folders% Ornder entsprechen den Kriterien!
if %mindeep% equ %maxdeep% (
for /f "tokens=1* delims==" %%a in ('set ... 2^>nul') do for /f "tokens=2* delims=?" %%i in ("%%b") do %Anzeigen% ren "%%i" "%%j" & set "%%a="
goto :files
) else echo Ordner werden nach Tiefe sortiert!&echo.
) else echo Kein Ordner entspricht den Kriterien!&echo.
:testfzero
if %fNL% lss %folders% (
set "fNL=%fNL%9"
set "vfN=%vfN%0"
goto :testfZero
)
set "fNL=9"
:testmzero
if %NL% lss %maxdeep% (
set "NL=%NL%9"
set "vmn=%vmN%0"
goto :testmZero
)
::Verzeichnisse nach Tiefe sortieren und Vars setzen
for /f "tokens=1* delims==" %%a in ('set ... 2^>nul') do for /f "tokens=1* delims=?" %%i in ("%%b") do (
set /a bedeep=maxdeep-%%i
set "vdn=%vmN%"
set "NL=9"
set "file=%%j"
call :memfolds %%a
)
:: verzeichnisse Umbenennen tiefstes zuerst
for /f "tokens=1* delims==" %%a in ('set .. 2^>nul') do for /f "tokens=1* delims=?" %%i in ("%%b") do %Anzeigen% ren "%%i" "%%j"
:: dateien Umbenennen
:files
if not defined d (for /f "tokens=*" %%i in ('dir /a:-d /b %s% 2^>nul') do set "file=%%~dpni" & set "ext=%%~xi" & set "all=%%i" & call :folderren
) else set "files="
if not defined d set "files=%files% Dateien "
if defined f (set "folders=") else set "folders=%folders% Ornder "
echo %folders%%files% entsprachen den Kriterien.&pause&popD& goto :eof
:memfolds
if %NL% lss %bedeep% (
set "NL=%NL%9"
set "vdn=%vdN:~1%"
goto :memfolds
)
set /a subfold+=1
set "..%vdN%%bedeep%%vfN%%subfold%=%file%"
if %fNL% equ %subfold% (
set "fNL=%fNL%9"
set "vfN=%vfN:~1%"
)
if defined %1 set "%1="
goto :eof
:folderren
if not "%file:*\=%" == "%file%" (
set "file=%file:*\=%"
if defined setdeep1 set /a deep+=1
goto :folderren
)
set "new=%file%"
:write
if "%Batch%"=="%all%" goto :eof
::UmlauteNormal
if defined u goto :u
set "new=%new:ß=ss%"
set "new=%new:Ä=Ae%"
set "new=%new:Ö=Oe%"
set "new=%new:Ü=Ue%"
set "new=%new:ä=ae%"
set "new=%new:ö=oe%"
set "new=%new:ü=ue%"
::Umlautefalsch dargestellt
set "new=%new:á=ss%"
set "new=%new:Ž=Ae%"
set "new=%new:™=Oe%"
set "new=%new:š=Ue%"
set "new=%new:„=ae%"
set "new=%new:”=oe%"
set "new=%new:=ue%"
::SonderZeichen u-strich Klammer etc
:u
if defined so goto :so
set "new=%new: =_%" & ::Leerzeichen
set "new=%new:,=_%"
set "new=%new:.=_%"
set "new=%new:;=_%"
set "new=%new:!=_%"
set "new=%new:'=_%"
set "new=%new:(=_%"
set "new=%new:)=_%"
set "new=%new:[=_%"
set "new=%new:]=_%"
set "new=%new:{=_%"
set "new=%new:}=_%"
set "new=%new:#=_%"
set "new=%new:õ=_%" & ::Paragraphenzeichen
set "new=%new:$=_%"
setlocal enabledelayedexpansion
set "new=!new:%%=_!" & ::Prozentzeichen
endlocal&set "new=%new%"
set "new=%new:&=_%"
:so
if "%file%"=="%new%" goto :eof
if not defined setdeep1 goto :ren
if not defined mindeep set "mindeep=%deep%"
if %deep% gtr %maxdeep% set "maxdeep=%deep%"
set /a folders+=1
set "...%folders%=%deep%?%foldername%?%new%"
goto :eof
:ren
set /a files+=1
%LZ%%Anzeigen% ren "%all%" "%new%%ext%"
::----schnapp---Unterordner-und-enthaltene-Dateien-Umbenamsen-fuer-CDVD.bat
Gruß Phil
moin Manfred,
naja manche Treads müssen auch später "Wiederbelebt" werden.
ich hab schon eine andere Version in Arbeit (z.Zt. aber arbeite ich nicht daran)
Hier ist Schon mal die Hilfe davon
Die Optionen /t /n und /r sind noch nicht Völlständig integriert und eine NamensÜberprüfung welche beim Umschreiben wenn schon Vorhanden (auser das Umzuschreibende selbst) mit einem Zähler versieht - ist noch nicht Fertiggestellt.
der Rest läuft aber.
Gruß Phil
naja manche Treads müssen auch später "Wiederbelebt" werden.
ich hab schon eine andere Version in Arbeit (z.Zt. aber arbeite ich nicht daran)
Hier ist Schon mal die Hilfe davon
zeigt Verzeichnisse und UnterVerzeichnisse sowie deren Dateien mit:
Umlauten, Leerzeichen, Klammern, Kommata, Punkten, SonderZeichen etc an.
danach wird jeweils das Ergebnis der Umbenennung angezeigt.
Syntax:
RENUnterordnerundUFiles2BurnCDVD [/a] [/-s] [/d | /-d] [/u | /-u]
[Laufwerk:][Pfad][Ordnername]
[/zZeichen(Satz)[:ErsetzungsZeichen(Satz)] ...]
[/cZeichenfolge[:ErsetzungsZeichenfolge] ...]
[/tErweitert] [/nName] [/r]
Parameter Bedeutung
/a Es wird ohne Anzuzeigen Umbenannt
/-s Es wird NICHT Rekursiv abgearbeitet
/d Ordnernamen werden nur abgearbeitet
/-d Dateienamen werden nur abgearbeitet
/u Umlaute werden NICHT einbezogen
/e Sonderzeichen werden Nicht einbezogen
/zZeichen(satz):ErsetzungsZeichen(Satz)
Zeichen(satz) wird einzeln Nacheinander mit
ErsetzungsZeichen oder
ErsetzungsZeichen(Satz) einzeln Nacheinander bis zum letzten
Zeichen welches für den Rest aus Zeichen(satz) verwendet wird,
ersetzt.
OHNE Ersetzungszeichen wird gelöscht
: Trennzeichen zwischen zu Ersetztendem und Ersetzung
/ ErsetzungsZeichen nur in Option /z
der Schrägstrich ist ein Platzhalter für zu Löschende Zeichen.
Beispiele: /z" .,;():_/" ersetzt Leerzeichen mit Unterstrich
loescht . , ; ( )
/z";~ /_" loescht Semikolon und Tilde
ersetz Leerzeichen % ( ) mit Unterstrich
/cZeichen(folge):ErsetzungsZeichen(folge)
Zeichen(folge) wird mit Ersetzungszeichen(folge) ersetzt
* Mit Stern am Anfang wird alles vor inklusive dieser
Zeichen(folge) Ersetzt.
OHNE Ersetzungszeichen wird gelöscht.
: Trennzeichen zwischen zu Ersetztendem und Ersetzung
Die Zeichen = und ~ bei Option /c und /z werden auch ersetzt.
/tErweitert
Erweiterte Stringzerlegung wie im Befehl SET für OffSet.
Beispiele: /t"~0,5" belässt die ersten 5 Zeichen
/t"~0,4 ~6" löscht das 5. Zeichen
/nName Einzuschliesende(r) Datei-/Ordnername(n)
/r Rangfolge der Ersetzungsparameter beibehalten.
der Rest läuft aber.
Das Ganze funktioniert super.
soll es ja auch.Gruß Phil
Hallo, das Thema ist zwar nun schon 2-3 Wochen alt aber das Script wäre genau das was ich suche. Leider geht es iwie bei mir nicht. Habe einen Ordner mit Unterordner und in dem befinden sich Datein. Das Script meldet "1 Ordner entsprechen den Kriterien" und dann kommt ne ganze Reihe mit "Das System kann den angegebenen Pfad nicht finden"
Umbennen tut er aber nix (Habe testweise in beide Ordner und die Datein mal ein Sonderzeichen eingefügt.
Die echos hab ich entfernt ;)
€dit
ok hab erstens ein paar fehlende " bei PushD "%pfad%" ersetzt und außerdem festgestellt das das Umbenennen erst beim nächst tieferen Ordner beginnt. Also wenn ich die Struktur "Nöer Ordner\testä\" und "Nöer Ordner" in die batch ziehe benennt der nur testä->testae um....
gruß e-horn
Umbennen tut er aber nix (Habe testweise in beide Ordner und die Datein mal ein Sonderzeichen eingefügt.
Die echos hab ich entfernt ;)
€dit
ok hab erstens ein paar fehlende " bei PushD "%pfad%" ersetzt und außerdem festgestellt das das Umbenennen erst beim nächst tieferen Ordner beginnt. Also wenn ich die Struktur "Nöer Ordner\testä\" und "Nöer Ordner" in die batch ziehe benennt der nur testä->testae um....
gruß e-horn
[OT] Moin e-horn,
willkommen im Forum und in diesem Zweigarm der Galaxie
Nur interessehalber - wie viele Erd-Jahre dauert denn auf eurem Planeten eine Runde um das Zentralgestirn?
Nimm als Zeichen der Freundschaft unserer Planeten diese Botschaft mit zurück:
Und sag zuhause
Biber hassen Montage
[/OT]
willkommen im Forum und in diesem Zweigarm der Galaxie
Nur interessehalber - wie viele Erd-Jahre dauert denn auf eurem Planeten eine Runde um das Zentralgestirn?
Umbennen tut er aber nix
Witzig, der Dialekt bei euch ist sehr ähnlich dem hier so beliebten....Nimm als Zeichen der Freundschaft unserer Planeten diese Botschaft mit zurück:
Set /a rgc+=1
#789
Und sag zuhause
Biber hassen Montage
[/OT]
Hallo Biber, hab schon viel gelesen von dir. Kommt man ja nicht dran vorbei wenn man sich hier über batch schlau macht :D
Zu welchem Code gehört das denn? Also muss sagen hab das erste script von pieh-ejdsch jetz zum laufen gebracht, hab noch ein "chcp 1252" eingefügt und dann ging das auch mit den Sonderzeichen ordentlich.
Muss mich eben nur dran gewöhnen das er nur die Unterordner des übergebenen Ordners anpasst
danke dir
gruß e-horn
Zu welchem Code gehört das denn? Also muss sagen hab das erste script von pieh-ejdsch jetz zum laufen gebracht, hab noch ein "chcp 1252" eingefügt und dann ging das auch mit den Sonderzeichen ordentlich.
Muss mich eben nur dran gewöhnen das er nur die Unterordner des übergebenen Ordners anpasst
danke dir
gruß e-horn
Moin e-horn,
freut mich, dass du es zum Fliegen gebracht hast.
Zur Frage
Grüße
Biber
freut mich, dass du es zum Fliegen gebracht hast.
Zur Frage
Zu welchem Code gehört das denn?
-> Details zum running gag counter rgc stehen in unseren Wird es einen numerischen Überlauf der Variablen rgc geben?Grüße
Biber