Zweites Zeichen bei Ordnern und Unterordner ersetzten durch Batch
Hallo zusammen, ich hab ein kleines Problem und ich hoffe ihr könnt mir helfen.
Problembeschreibung:
Ich habe eine leere Ordnerstruktur mit vielen Unterordnern die sehr verzweigt sind. (2500 ordner)
Ich würde gerne eine batch schreiben die sich jeden Ordner anschaut und wenn sie an zweiter Stelle (nur an zweiter Stelle) die zahl 4 findet durch die zahl 5 ersetzt.
Da ich fast keine Erfahrung diesbezüglich habe, hab ich schon Probleme beim Ansatz.
DANKE
bartosch
Problembeschreibung:
Ich habe eine leere Ordnerstruktur mit vielen Unterordnern die sehr verzweigt sind. (2500 ordner)
Ich würde gerne eine batch schreiben die sich jeden Ordner anschaut und wenn sie an zweiter Stelle (nur an zweiter Stelle) die zahl 4 findet durch die zahl 5 ersetzt.
Da ich fast keine Erfahrung diesbezüglich habe, hab ich schon Probleme beim Ansatz.
DANKE
bartosch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 171080
Url: https://administrator.de/forum/zweites-zeichen-bei-ordnern-und-unterordner-ersetzten-durch-batch-171080.html
Ausgedruckt am: 21.04.2025 um 08:04 Uhr
14 Kommentare
Neuester Kommentar

Moin,
such doch mal im Forum nach bestimmtes Zeichen in Verzeichnis ersetzen.
Da sollte doch was für dich dabei sein.
Gruß
such doch mal im Forum nach bestimmtes Zeichen in Verzeichnis ersetzen.
Da sollte doch was für dich dabei sein.
Gruß
Hallo bartosch,
das sollte so gehen:
In Zeile 3 das Verzeichnis eintragen, das die Verzeichnisstruktur enthält.
[EDIT]
ACHTUNG! Das Script funktioniert nur, wenn kein Explorerfenster geöffnet ist, in dem kurz vor Ausführung des Scripts durch die zu bearbeitende Verzeichnisstruktur gebrowst wurde. Siehe die folgenden Postings.
Ansonsten hat User Skyemugen eine zwar langsamere aber immer funktionierende Lösung gepostet, mittlerweile ziemlich ans Ende des Threads gerutscht.
[/EDIT]
Gruß
Friemler
das sollte so gehen:
@echo off & setlocal
set "SrcDir=E:\Test"
for /d /r "%SrcDir%" %%d in ("?4*.*") do (
set "DirPath=%%d"
set "DirName=%%~nxd"
call :ProcessDir
)
exit /b
:ProcessDir
set "DirName=%DirName:~0,1%5%DirName:~2%"
ren "%DirPath%" "%DirName%"
exit /b
In Zeile 3 das Verzeichnis eintragen, das die Verzeichnisstruktur enthält.
[EDIT]
ACHTUNG! Das Script funktioniert nur, wenn kein Explorerfenster geöffnet ist, in dem kurz vor Ausführung des Scripts durch die zu bearbeitende Verzeichnisstruktur gebrowst wurde. Siehe die folgenden Postings.
Ansonsten hat User Skyemugen eine zwar langsamere aber immer funktionierende Lösung gepostet, mittlerweile ziemlich ans Ende des Threads gerutscht.
[/EDIT]
Gruß
Friemler
Aloha,
ich hätte da auch etwas im Angebot: dat dauert 'n bissl - getestet mit 8 Hauptordnern und jeweils 6 Ebenen
Eventuell ein wenig umständlich aber so ist das bei mir eben
dafür ist es getestet und funktionsfähig.
Die Schwierigkeit ist ja hierbei, dass erst die Child-Ordner umbenannt werden und dann die Parent-Ordner, sonst find' der nix mehr, darum rattert mein Skript auch erst bis zur Unendlichkeit durch und arbeitet sich dann wieder nach oben hin, etwas schlaueres fällt mir auf 'nem Montag erst einmal nicht ein. ^_^
Hm aber mit Suchmaske sollte natürlich schneller sein, muss ich noch einmal testen, ich trau diesen Suchmasken nicht immer ^_^ Lieber doch nicht, dann werden keine Verzeichnisse mehr durchsucht, die dem nicht entsprechen aber eventuell deren Unterordnern, also belass' ich es dabei.
greetz André
ich hätte da auch etwas im Angebot: dat dauert 'n bissl - getestet mit 8 Hauptordnern und jeweils 6 Ebenen
@echo off & setlocal
set "Pfad=E:\Skripte\Ablage"
pushd "%Pfad%"
@for /f "delims=" %%s in ('dir /b /ad') do call :Tauchen "%%s"
popd
pause
exit /b
:Tauchen
pushd "%~1"
@for /f "delims=" %%s in ('dir /b /ad') do call :Tauchen "%%s"
set "Ebene=%cd%"
set "Ordner=%~1"
popd
call :Ablauf "%Ordner%"
goto :eof
:Ablauf
set "Name=%~1"
set "Neu=%Name:~1,1%"
if "%Neu%" EQU "4" ren "%Ebene%" "%Name:~0,1%5%Name:~2%"
goto :eof
Eventuell ein wenig umständlich aber so ist das bei mir eben
Die Schwierigkeit ist ja hierbei, dass erst die Child-Ordner umbenannt werden und dann die Parent-Ordner, sonst find' der nix mehr, darum rattert mein Skript auch erst bis zur Unendlichkeit durch und arbeitet sich dann wieder nach oben hin, etwas schlaueres fällt mir auf 'nem Montag erst einmal nicht ein. ^_^
greetz André
Hallo bartosch,
ich habe nur oberflächlich getestet. Ab einer gewissen Verschachtelungstiefe von umzubenennenden Verzeichnissen funktioniert das Script nicht mehr. Nimm das Script von Skyemugen.
Ich hänge mal eine Verzeichnisstruktur an, bei der es teilweise funktioniert hat, teilweise nicht.
<code type="plain>
E:\TEST
├───14test Fehler
│ ├───14test Fehler
│ │ ├───14test Fehler
│ │ │ ├───15test Erfolg
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test Erfolg
│ │ └───16test
│ └───16test
│ ├───14test Fehler
│ │ ├───15test Erfolg
│ │ └───16test
│ └───16test
│ ├───15test Erfolg
│ └───16test
└───16test Interessant wird es ab hier
├───15test Erfolg
│ ├───15test Erfolg
│ │ ├───15test Erfolg
│ │ └───16test
│ └───16test
│ ├───15test Erfolg
│ └───16test
└───16test
├───15test Erfolg
│ ├───15test Erfolg
│ └───16test
└───16test
├───15test Erfolg
└───16test
[EDIT]
Und wie immer gilt: Batchfiles, die nicht machen, was sie sollen, aus einem Konsolenfenster starten und nicht per Doppelklick, damit man auch die Ausgaben sieht. Und zum debuggen zusätzlich noch das
Komisch, jetzt funktioniert das Script mit der obigen Verzeichnisstruktur. Hmm, Kopf kratz....
[/EDIT]
Gruß
Friemler
ich habe nur oberflächlich getestet. Ab einer gewissen Verschachtelungstiefe von umzubenennenden Verzeichnissen funktioniert das Script nicht mehr. Nimm das Script von Skyemugen.
Ich hänge mal eine Verzeichnisstruktur an, bei der es teilweise funktioniert hat, teilweise nicht.
<code type="plain>
E:\TEST
├───14test Fehler
│ ├───14test Fehler
│ │ ├───14test Fehler
│ │ │ ├───15test Erfolg
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test Erfolg
│ │ └───16test
│ └───16test
│ ├───14test Fehler
│ │ ├───15test Erfolg
│ │ └───16test
│ └───16test
│ ├───15test Erfolg
│ └───16test
└───16test Interessant wird es ab hier
├───15test Erfolg
│ ├───15test Erfolg
│ │ ├───15test Erfolg
│ │ └───16test
│ └───16test
│ ├───15test Erfolg
│ └───16test
└───16test
├───15test Erfolg
│ ├───15test Erfolg
│ └───16test
└───16test
├───15test Erfolg
└───16test
[EDIT]
Und wie immer gilt: Batchfiles, die nicht machen, was sie sollen, aus einem Konsolenfenster starten und nicht per Doppelklick, damit man auch die Ausgaben sieht. Und zum debuggen zusätzlich noch das
ECHO OFF
rausnehmen, dann sieht man auch, in welcher Reihenfolge und mit welchem Inhalt die einzelnen Zeilen ausgeführt werden.Komisch, jetzt funktioniert das Script mit der obigen Verzeichnisstruktur. Hmm, Kopf kratz....
[/EDIT]
Gruß
Friemler
Aloha Friemler,
stimmt, fiel mir vorhin auf, irgendwann ist ihm der Pfadname zu lang und wird aber leer dargestellt, bei mir hatte er gar nichts umbenannt, sondern gleich den Fehler ausgespuckt, witzigerweise läuft dein Skript jetzt durch, ohne Probleme, durch die ganze Struktur *grübel* hattest du etwas am Code editiert noch? Habe eben neu c&p, davor lief es definitiv nicht.
greetz André
P.S.: So Kombinationen wie
stimmt, fiel mir vorhin auf, irgendwann ist ihm der Pfadname zu lang und wird aber leer dargestellt, bei mir hatte er gar nichts umbenannt, sondern gleich den Fehler ausgespuckt, witzigerweise läuft dein Skript jetzt durch, ohne Probleme, durch die ganze Struktur *grübel* hattest du etwas am Code editiert noch? Habe eben neu c&p, davor lief es definitiv nicht.
greetz André
P.S.: So Kombinationen wie
/d /r
sind mir immer noch spanisch ;D
Hallo André,
nein ich habe nichts geändert, aber gerade die gleiche Erfahrung wie Du gemacht (es läuft
).
[EDIT]
Nach ein paar Tests komme ich zu dem Ergebnis, dass der Erfolg oder Misserfolg des Scripts davon abhängt, ob ein Explorerfenster, mit dem kurz vorher durch die zu bearbeitende Verzeichnisstruktur gebrowst wurde, offen ist oder nicht. (Noch mehr Kopf kratz...)
Beispiel
Folgende Verzeichnisstruktur:
Man ist dann im oben markierten Verzeichnis.
Fazit
Da spielt wohl der Verzeichniscache des Explorers eine Rolle.
[/EDIT]
Gruß
Friemler
nein ich habe nichts geändert, aber gerade die gleiche Erfahrung wie Du gemacht (es läuft
[EDIT]
Nach ein paar Tests komme ich zu dem Ergebnis, dass der Erfolg oder Misserfolg des Scripts davon abhängt, ob ein Explorerfenster, mit dem kurz vorher durch die zu bearbeitende Verzeichnisstruktur gebrowst wurde, offen ist oder nicht. (Noch mehr Kopf kratz...)
Beispiel
Folgende Verzeichnisstruktur:
E:\TEST
├───14test
│ ├───14test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ │ ├───14test
│ │ │ │ │ ├───14test
│ │ │ │ │ └───16test
│ │ │ │ └───16test
│ │ │ │ ├───14test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───14test
│ │ │ │ ├───14test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ │ ├───14test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ │ ├───14test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ └───16test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ └───16test
└───16test
├───14test
│ ├───14test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ │ ├───14test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ │ ├───14test
│ │ │ ├───14test
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ └───16test
└───16test
├───14test
│ ├───14test
│ │ ├───14test
│ │ │ ├───14test <- Bis zu diesem Verzeichnis im Explorer durchklicken
│ │ │ └───16test
│ │ └───16test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ └───16test
└───16test
├───14test
│ ├───14test
│ │ ├───14test
│ │ └───16test
│ └───16test
│ ├───14test
│ └───16test
│ ├───14test
│ └───16test
└───16test
├───14test
│ ├───14test
│ └───16test
└───16test
├───14test
└───16test
- Explorer öffnen und bis zum folgenden Verzeichnis durchklicken:
E:\Test\16test\16test\14test\14test\14test\14test
- Jetzt im Explorerfenster ins Wurzelverzeichnis von E: wechseln, auch in der Baumansicht links alle Unterzweige von E: schließen.
- Script aus Konsolenfenster starten -> 3 Fehlermeldungen "Zugriff verweigert"
- Ergebnis des Scriptlaufs:
E:\TEST
├───15test
│ ├───15test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ │ ├───15test
│ │ │ │ │ ├───15test
│ │ │ │ │ └───16test
│ │ │ │ └───16test
│ │ │ │ ├───15test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───15test
│ │ │ │ ├───15test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ │ ├───15test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ │ ├───15test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ └───16test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ └───16test
└───16test
├───15test
│ ├───15test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ │ ├───15test
│ │ │ │ └───16test
│ │ │ └───16test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ │ ├───15test
│ │ │ ├───15test
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ └───16test
└───16test
├───14test <- Diese Verzeichnisse wurden eben geöffnet
│ ├───14test <-
│ │ ├───14test <-
│ │ │ ├───15test <- Hier hat es funktioniert
│ │ │ └───16test
│ │ └───16test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ └───16test
└───16test
├───15test
│ ├───15test
│ │ ├───15test
│ │ └───16test
│ └───16test
│ ├───15test
│ └───16test
│ ├───15test
│ └───16test
└───16test
├───15test
│ ├───15test
│ └───16test
└───16test
├───15test
└───16test
- Explorerfenster schließen
- Script nochmals starten
- Keine Fehlermeldung, Verzeichnisse wurden umbenannt.
Fazit
Da spielt wohl der Verzeichniscache des Explorers eine Rolle.
[/EDIT]
Gruß
Friemler
moin Andrè,
warum sehe ich den T erst jetzt? Na lieber spät als nie.
wenn erst der Tiefste Ordner Umbenannt wird bist Du immer auf der Sicheren Seite.
Frimlers Script mit For /d /r ... da werden die Ordner sicher "on the Fly" in die Variablen gesetzt und der Pfad ist demnach immer Aktuell
anders beim dir wo ja praktisch ein Abild für "offline" ensteht.
Timo (oder Lot) hatte die Sortierung mal so gelöst
zuvor hatte ich die Verzeichnisse anders Vorsortiert
Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern
das in der Marke :u müsste mit dem Ersetzt werden:
und mit Paramtetern Pfad\Ordner /d /u starten
aber Deins und Friemlers ist dafür schön Kurz.
das ein Ordner nicht umbenannt werden kann wenn er offen ist weis ja jeder aber wenn der Explorer noch offen ist und der Pfad nicht mehr aktuell ... ? Grübel
Gruß Phil
warum sehe ich den T erst jetzt? Na lieber spät als nie.
wenn erst der Tiefste Ordner Umbenannt wird bist Du immer auf der Sicheren Seite.
Frimlers Script mit For /d /r ... da werden die Ordner sicher "on the Fly" in die Variablen gesetzt und der Pfad ist demnach immer Aktuell
anders beim dir wo ja praktisch ein Abild für "offline" ensteht.
Timo (oder Lot) hatte die Sortierung mal so gelöst
Dir /ad /b /s D:\ |sort /r
zuvor hatte ich die Verzeichnisse anders Vorsortiert
Ersetzen von Zeichen in Datei- und Verzeichnisnamen in allen Unterordnern
das in der Marke :u müsste mit dem Ersetzt werden:
setlocal enabledelayedexpansion
if "!new:~1,1!" == "4" set "new=!new:~0,1!5!new~2!"
endlocal&set "new=%new%"
aber Deins und Friemlers ist dafür schön Kurz.
das ein Ordner nicht umbenannt werden kann wenn er offen ist weis ja jeder aber wenn der Explorer noch offen ist und der Pfad nicht mehr aktuell ... ? Grübel
Gruß Phil