chinatiger
Goto Top

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 face-sad

Ich hoffe ihr könnt mir da weiterhelfen.

mfg
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

Content-Key: 124042

Url: https://administrator.de/contentid/124042

Ausgedruckt am: 28.03.2024 um 19:03 Uhr

Mitglied: 45877
45877 02.09.2009 um 14:29:27 Uhr
Goto Top
hallo,

schau dir mal das hier an.

http://www.filerenamer.net
Mitglied: pieh-ejdsch
pieh-ejdsch 03.09.2009 um 02:39:12 Uhr
Goto Top
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]

::----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]
Mitglied: 81825
81825 03.09.2009 um 02:54:46 Uhr
Goto Top
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.

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!
Mitglied: 45877
45877 03.09.2009 um 12:05:58 Uhr
Goto Top
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...
Mitglied: pieh-ejdsch
pieh-ejdsch 03.09.2009 um 12:45:52 Uhr
Goto Top
Hi,
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
Mitglied: Nostradamus2
Nostradamus2 14.11.2009 um 01:43:35 Uhr
Goto Top
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
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:.=% 
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... face-wink

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]
Mitglied: pieh-ejdsch
pieh-ejdsch 24.11.2009 um 12:54:41 Uhr
Goto Top
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
Mitglied: 13232
13232 24.11.2009 um 18:57:25 Uhr
Goto Top
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.
Mitglied: Biber
Biber 24.11.2009, aktualisiert am 03.08.2012 um 23:58:19 Uhr
Goto Top
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 face-smile ]]]

@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.
Normalerweise werden "Sonderzeichen" (==Zeichen, die im Batch-Sprachschatz-Sonderbedeutung haben) mit einem Caret ("^") maskiert.
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
Mitglied: 13232
13232 24.11.2009 um 21:49:56 Uhr
Goto Top
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.


  1. raz0r
Mitglied: Biber
Biber 24.11.2009 um 21:55:44 Uhr
Goto Top
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)
(=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
Mitglied: pieh-ejdsch
pieh-ejdsch 29.11.2009 um 22:53:31 Uhr
Goto Top
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
Mitglied: derfnam
derfnam 16.12.2010 um 08:12:27 Uhr
Goto Top
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
Mitglied: pieh-ejdsch
pieh-ejdsch 16.12.2010 um 22:39:02 Uhr
Goto Top
moin Manfred,
die Ausgabe: x Ordner entsprechen den Kriterien, aber sie werden leider nciht umbenannt.

in Zeile 41 ist
 @echo
zu entfernen

Gruß Phil
Mitglied: derfnam
derfnam 17.12.2010 um 17:53:14 Uhr
Goto Top
Vielen Dank für die schnelle Antwort.
In Zeile 15 habe ich auch ein @echo gefunden. Wofür ist das gut?

Gruß Manfred
Mitglied: pieh-ejdsch
pieh-ejdsch 17.12.2010, aktualisiert am 03.08.2012 um 19:13:52 Uhr
Goto Top
moin Manfred,

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 gar net geübersehen - zulange her...

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
Mitglied: derfnam
derfnam 18.12.2010 um 07:15:43 Uhr
Goto Top
Hallo Phil,
ok, ich werd mir das die nächsten Tage mal genauer ansehen. Vielen Dank vorerst mal und ich melde mich wieder.

Gruß Manfred
Mitglied: derfnam
derfnam 02.02.2011 um 12:14:55 Uhr
Goto Top
Hi Phil,
aus den paar Tagen sind ein paar Wochen gewiorden, aber endlich bin ich mal dazu gekommen ein wenig rum zu experimentieren. Das Ganze funktioniert super. Leider verstehe ich nicht alles. Genauso habe ich mir es vorgestellt.
Vielen Dank.

Grüße Manfred
Mitglied: pieh-ejdsch
pieh-ejdsch 02.02.2011 um 13:43:44 Uhr
Goto Top
moin Manfred,

naja manche Treads müssen auch später "Wiederbelebt" werden. face-wink

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.
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.
Das Ganze funktioniert super.
soll es ja auch.

Gruß Phil
Mitglied: FunkyFresh
FunkyFresh 29.04.2011 um 20:42:31 Uhr
Goto Top
... hat sich erledigt. Habe ein script gefunden was bei mir funktioniert.
Mitglied: e-horn
e-horn 16.01.2012 um 18:33:37 Uhr
Goto Top
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
Mitglied: Biber
Biber 16.01.2012 um 20:19:09 Uhr
Goto Top
[OT] Moin e-horn,

willkommen im Forum und in diesem Zweigarm der Galaxie
Zitat von @e-horn:
Hallo, das Thema ist zwar nun schon 2-3 Wochen alt ...
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]
Mitglied: e-horn
e-horn 16.01.2012 um 20:44:53 Uhr
Goto Top
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 face-smile

danke dir
gruß e-horn
Mitglied: Biber
Biber 17.01.2012 um 13:56:16 Uhr
Goto Top
Moin e-horn,

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