Ordnernamen auf die ersten 7 Zeichen reduzieren.
Hallo zusammen,
bei folgendem Problem benötige ich eure Hilfe:
Ich habe eine Ordnerstruktur die so aussieht:
T:\Ordner\Unterordner\UnterUnterordner\
Die „UnterUnterordner“ sollen vom Namen her auf die ersten 7 Zeichen reduziert werden … das habe ich mit folgendem Quellcode versucht:
Leider benennt er so jeden in Unterordner befindenden Ordner nach dem letzten Ordner um. Kann man in der Batch irgendwie festlegen, dass Ordner für Ordner abgearbeitet wird?
Liebe Grüße,
cr0sscuT
bei folgendem Problem benötige ich eure Hilfe:
Ich habe eine Ordnerstruktur die so aussieht:
T:\Ordner\Unterordner\UnterUnterordner\
Die „UnterUnterordner“ sollen vom Namen her auf die ersten 7 Zeichen reduziert werden … das habe ich mit folgendem Quellcode versucht:
:UMBENENNEN
for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do (
set "name=%%~nxj" && echo ren "%%j" "%name:~0,7%"
)
)
Leider benennt er so jeden in Unterordner befindenden Ordner nach dem letzten Ordner um. Kann man in der Batch irgendwie festlegen, dass Ordner für Ordner abgearbeitet wird?
Liebe Grüße,
cr0sscuT
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 213218
Url: https://administrator.de/forum/ordnernamen-auf-die-ersten-7-zeichen-reduzieren-213218.html
Ausgedruckt am: 25.12.2024 um 19:12 Uhr
12 Kommentare
Neuester Kommentar
Moin cr0sscut,
es würde schon helfen, wenn du "Setlocal EnableDelayedExpansion" als neue erste Zeile verwendest und dann das ""%name:~0,7%" in "!name:~0,7!" änderst.
Aber dennoch ist es ein Schönwetterbatch:
Mach erstmal eine Version v 0.02beta fertig, dann schauen wir weiter.
Grüße
Biber
es würde schon helfen, wenn du "Setlocal EnableDelayedExpansion" als neue erste Zeile verwendest und dann das ""%name:~0,7%" in "!name:~0,7!" änderst.
Aber dennoch ist es ein Schönwetterbatch:
- es wird nicht geprüft, ob die umzubenamsenden Ordner überhaupt mehr als 7 Zeichen haben
- es wird nicht geprüft, ob vielleicht mehrere Ordner auf den gleichen 7stelligen Namen verkürzt werden.
Mach erstmal eine Version v 0.02beta fertig, dann schauen wir weiter.
Grüße
Biber
... wobei es noch sicherer wird, wenn "
BTW: Wenn der Name schon vorher nicht mehr als 7 Zeichen lang war, passiert weiter nix Schlimmes ...
Grüße
bastla
delayedexpansion
" erst nach Zuweisung der Schleifenwerte an Variable aktiviert wird, da so auch die "!"-Problematik umschifft werden kann - also etwa::UMBENENNEN
for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do (
set "Ordner=%%~fj" & set "name=%%~nxj"
setlocal enabledelayedexpansion
echo ren "!Ordner!" "!name:~0,7!"
endlocal
)
)
Grüße
bastla
Hallo cr0sscuT!
Vollig ungetestet könnte das etwa so aussehen:
Die "
In Zeile 11 wird der neue Ordner (mit dem gekürzten Namen) erstellt, bzw die Fehlermeldung, wenn er bereits existiert, unterdrückt. Danach werden in den beiden folgenden Schleifen die Inhalte des Ordners in den neuen Ordner verschoben, wobei die Namen der Dateien angepasst werden.
Hinsichtlich der Dateinamen setze ich den beschriebenen Aufbau mit 5 Teilen, getrennt durch "-", von denen der 5. Teil "mitgenommen" werden soll, voraus. Aus den Ordnernamen ließen sich nach dem selben Schema (Trennzeichen allerdings "_") die ersten 4 Teile extrahieren, ich habe mich aber an Deinen Vorschlag mit den ersten 21 Zeichen gehalten.
Verbleibende Fehlerquellen:
Grüße
bastla
Vollig ungetestet könnte das etwa so aussehen:
:UMBENENNEN
for /d %%i in ("T:\Ordner\Unterordner\*") do for /d %%j in ("%%i\*") do (
set "Ordner=%%i"
set "UOrdner=%%j"
set "UOName=%%~nxj"
setlocal enabledelayedexpansion
set "Ziel=!Ordner!\!UOName:~,7!"
set "UOKennung=!UOName:~,21!"
set "UOKennung=!UOKennung:_=-!"
echo md "!Ziel!" 2>nul
for %%a in ("!UOrdner!\*.*") do (
for /f "tokens=5 delims=-" %%b in ("%%~na") do (
echo move "%%a" "!Ziel!\!UOKennung!-%%b%%~xa"
)
)
for /d %%k in ("%%j\*") do echo move "%%k" "!Ziel!"
echo rd "!UOrdner!"
endlocal
)
echo
" in den Zeilen 11, 14, 17 und 18 dienen zum Testen - es werden so alle Anweisungen danach nur angezeigt, aber nicht ausgeführt.In Zeile 11 wird der neue Ordner (mit dem gekürzten Namen) erstellt, bzw die Fehlermeldung, wenn er bereits existiert, unterdrückt. Danach werden in den beiden folgenden Schleifen die Inhalte des Ordners in den neuen Ordner verschoben, wobei die Namen der Dateien angepasst werden.
Hinsichtlich der Dateinamen setze ich den beschriebenen Aufbau mit 5 Teilen, getrennt durch "-", von denen der 5. Teil "mitgenommen" werden soll, voraus. Aus den Ordnernamen ließen sich nach dem selben Schema (Trennzeichen allerdings "_") die ersten 4 Teile extrahieren, ich habe mich aber an Deinen Vorschlag mit den ersten 21 Zeichen gehalten.
Verbleibende Fehlerquellen:
- Dateinamen mit enthaltenen "!"
- gleichnamige Unterordner der zu verarbeitenden Ordner
Grüße
bastla
[OT] @bastla
Hab ich schon mal geschrieben, wie sehr ich deine Geduld bewundere?
Ich hatte schon gestern beim Mitverfolgen des Beitragsverlaufs etwas hyperventiliert und auch schon einen mehrzeiligen Kommentar fast fertig geschrieben, der allerdings keine einzige Batchzeile enthielt.
Das kann kann doch nicht sein, dass wir uns absolut planlos von freien Assoziationsketten eines Fragestellers treibenlassen und ihm durch gefühlte 157 suggestive Rückfragen einen Plan unterschieben, für den er sich vorher keine zwei Zehntelsekunden Zeit genommen hat.
@cr0sscut
Das kann ich mir wirklich nicht vorstellen, dass ihr in eurem Laden wirklich so arbeitet - erstmal irgendwie anfangen, dann können wir schon die begonnene Realisierung melden, danach schauen wir uns die Kollateralschäden an und machen ein Folgeprojekt draus.
Von 4 Tagen Laufzeit dieses Beitrags hätten wir - eine Auseinandersetzung mit dem Konzept vorausgesetzt - dreieinhalb einsparen können.
Das musste ich loswerden - dafür habe ich den Beitrag aber nicht in die Tonne gekloppt.
Grüße
Biber
[/OT]
Hab ich schon mal geschrieben, wie sehr ich deine Geduld bewundere?
Ich hatte schon gestern beim Mitverfolgen des Beitragsverlaufs etwas hyperventiliert und auch schon einen mehrzeiligen Kommentar fast fertig geschrieben, der allerdings keine einzige Batchzeile enthielt.
Das kann kann doch nicht sein, dass wir uns absolut planlos von freien Assoziationsketten eines Fragestellers treibenlassen und ihm durch gefühlte 157 suggestive Rückfragen einen Plan unterschieben, für den er sich vorher keine zwei Zehntelsekunden Zeit genommen hat.
@cr0sscut
Das kann ich mir wirklich nicht vorstellen, dass ihr in eurem Laden wirklich so arbeitet - erstmal irgendwie anfangen, dann können wir schon die begonnene Realisierung melden, danach schauen wir uns die Kollateralschäden an und machen ein Folgeprojekt draus.
Von 4 Tagen Laufzeit dieses Beitrags hätten wir - eine Auseinandersetzung mit dem Konzept vorausgesetzt - dreieinhalb einsparen können.
Das musste ich loswerden - dafür habe ich den Beitrag aber nicht in die Tonne gekloppt.
Grüße
Biber
[/OT]
[auch OT]@ bastla
Okay, bei dir ist es Spieltrieb, aber bei mir setzt bei gewissen Beiträgen ein so genannter Spültrieb ein...
... und nachdem es heute auch eine Fortsetzung von Swanni und die TempTables gibt - den dritten Beitrag dieser Art werde ich wahrscheinlich etwas unangemessen kommentieren.
Grüße
Biber
[/auch OT]
Okay, bei dir ist es Spieltrieb, aber bei mir setzt bei gewissen Beiträgen ein so genannter Spültrieb ein...
... und nachdem es heute auch eine Fortsetzung von Swanni und die TempTables gibt - den dritten Beitrag dieser Art werde ich wahrscheinlich etwas unangemessen kommentieren.
Grüße
Biber
[/auch OT]
[weiterhin OT] @ Biber
Grüße
bastla
[/weiterhin OT]
nachdem es heute auch eine Fortsetzung von Swanni und die TempTables gibt
Ich hatte, als ich gestern Teil 2 gesehen habe, das ja zunächst auf ein hitzebedingtes Déjà-vu meinerseits zurückgeführt ...den dritten Beitrag dieser Art werde ich wahrscheinlich etwas unangemessen kommentieren.
... was ich wiederum durchaus angemessen fände. Grüße
bastla
[/weiterhin OT]