Ordnernamen und Unterordnernamen automatisch kürzen
Hallo, ich suche ein Programm/Batch mit dem es möglich ist Ordnernamen, Unterordner, unter unter Ordner usw... automatisch kürzen zu lassen ich habe nun lange gegooglet und auch hier im Forum gelesen aber nicht derart gefunden, für Dateinamen gibt es sowas ohne Ende aber ich finde nichts für Ordner Namen...
Falls jemand solch ein Tool kennt oder eine Batch hat/machen könnte wäre ich sehr dankbar.
mfg Toweli
[Edit Biber] Titel "Ordnernamen und Unterordnernamen aufotmatisch kürzen " an dieser Stelle mit dem Fremdwort editiert.
Und nach "Batch & Shell" verschoben von "Tools & Utilities"[/Edit]
Falls jemand solch ein Tool kennt oder eine Batch hat/machen könnte wäre ich sehr dankbar.
mfg Toweli
[Edit Biber] Titel "Ordnernamen und Unterordnernamen aufotmatisch kürzen " an dieser Stelle mit dem Fremdwort editiert.
Und nach "Batch & Shell" verschoben von "Tools & Utilities"[/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 100999
Url: https://administrator.de/forum/ordnernamen-und-unterordnernamen-automatisch-kuerzen-100999.html
Ausgedruckt am: 17.04.2025 um 13:04 Uhr
6 Kommentare
Neuester Kommentar
Moin Toweli,
ich habe irgendwo mal für einen Arbeitskollegen eine Batchdatei zusammengeschreddert, die alle Ordner und Unterordnernamen auf jeweils ein Zeichen verkürzt.
Wenn Dir das ausreicht, dann bring ich das Teil mit, wenn ich den Kollegen mal wieder besuchen darf.
Wenn Du etwas anderes willst, dann versuche es mal zu beschrieben.
Grüße
Biber
ich habe irgendwo mal für einen Arbeitskollegen eine Batchdatei zusammengeschreddert, die alle Ordner und Unterordnernamen auf jeweils ein Zeichen verkürzt.
Wenn Dir das ausreicht, dann bring ich das Teil mit, wenn ich den Kollegen mal wieder besuchen darf.
Wenn Du etwas anderes willst, dann versuche es mal zu beschrieben.
Grüße
Biber
Moin Toweli,
na ja, ich denke, gleich eine Batchdatei für diese Aufgabe wäre eventuell etwas übertrieben...
Als Zeile vom CMD-Prompt würde das hier reichen:
<code type>
setlocal enabledelayedexpansion & @for /R %i in (*.*) do @set "this=%~ni" & set "ext=%~xi" & @if "!this:~23,11!" NEQ "" @echo ren "%i" "!this:~0,23!!ext!"
...aber meinetwegen auch auf ein paar Zeilen breitgetreten:
[ungetestet]
Das gross geschriebene ECHO in dem Block :ProcessFile kann nach dem Testen entfernt werden.
Ich habe es auf DateNAMEN länger als 24 Zeichen bezogen (Länge der Extension NICHT eingerechnet).
Grüße
Biber
[Edit].... ach so ...Ordner ja auch...
Dann bitte als FOR-Anweisung diese hier verwenden:
Streiche. for /R %%i in (*.*) do Call :ProcessFile "%%i"
Setze: for /F "delims=" %%i in ('DIR /s /b *.*') do Call :ProcessFile "%%i"
Und vor das "*.*" ggf. noch das Startverzeichnis, z.B "D:\Test" setzen.
[/Edit]
[Edit2] @bastla "P.S.: @Biber: In Deinem Batch wäre die Schreibweise von "ProcessFile" in den Zeilen 3 und 6 noch anzugleichen ...
Danke für den Hinweis. Habe ich korrigiert. [/Edit]
na ja, ich denke, gleich eine Batchdatei für diese Aufgabe wäre eventuell etwas übertrieben...
Als Zeile vom CMD-Prompt würde das hier reichen:
<code type>
setlocal enabledelayedexpansion & @for /R %i in (*.*) do @set "this=%~ni" & set "ext=%~xi" & @if "!this:~23,11!" NEQ "" @echo ren "%i" "!this:~0,23!!ext!"
...aber meinetwegen auch auf ein paar Zeilen breitgetreten:
::---Snipp ShortenTo24.cmd
@echo off & Setlocal
for /R %%i in (*.*) do Call :ProcessFile "%%i"
goto :eof
:ProcessFile Parameter1 ist der vollständige Dateiname
set "FileName=%~n1"
IF "%FileName:~23,11!" NEQ "" ECHO ren "%~1" "%FileNamethis:~0,23%%~x1"
Das gross geschriebene ECHO in dem Block :ProcessFile kann nach dem Testen entfernt werden.
Ich habe es auf DateNAMEN länger als 24 Zeichen bezogen (Länge der Extension NICHT eingerechnet).
Grüße
Biber
[Edit].... ach so ...Ordner ja auch...
Dann bitte als FOR-Anweisung diese hier verwenden:
Streiche. for /R %%i in (*.*) do Call :ProcessFile "%%i"
Setze: for /F "delims=" %%i in ('DIR /s /b *.*') do Call :ProcessFile "%%i"
Und vor das "*.*" ggf. noch das Startverzeichnis, z.B "D:\Test" setzen.
[/Edit]
[Edit2] @bastla "P.S.: @Biber: In Deinem Batch wäre die Schreibweise von "ProcessFile" in den Zeilen 3 und 6 noch anzugleichen ...
Danke für den Hinweis. Habe ich korrigiert. [/Edit]
Hallo Toweli!
Da ja nicht auzuschließen ist, dass durch das Kürzen gleichnamige Ordner/Dateien entstehen würden, wird in dem folgenden Ansatz im Fall des Falles eine lfd Nummer zur Unterscheidung angefügt (wodurch allerdings die Namen wieder länger als 24 Zeichen werden können):
Der Basisordner, unterhalb dessen die Kürzungen vorgenommen werden sollen, ist in Zeile 2 festzulegen.
Vielleicht etwas übervorsichtig ist das Bearbeiten der Ordnerstruktur "von unten" her - es werden (durch die umgekehrte Sortierung der gesamten Ordnerliste) zunächst die untersten Ebenen umbenannt - so sollte es nicht passieren, dass ein Ordner nicht gefunden wird, weil ein darüberliegender Ordner zwischenzeitlich bereits umbenannt wurde.
Auch in diesem Batch gilt übrigens: Durch das "echo" vor dem "ren" werden die Umbenennungsbefehle vorläufig nur angezeigt (und erst nach dem Entfernen des "echo" tatsächlich ausgeführt).
Grüße
bastla
P.S.: @Biber: In Deinem Batch wäre die Schreibweise von "ProcessFile" in den Zeilen 3 und 6 noch anzugleichen ...
Da ja nicht auzuschließen ist, dass durch das Kürzen gleichnamige Ordner/Dateien entstehen würden, wird in dem folgenden Ansatz im Fall des Falles eine lfd Nummer zur Unterscheidung angefügt (wodurch allerdings die Namen wieder länger als 24 Zeichen werden können):
@echo off & setlocal
set "Basis=D:\Startordner"
set L1=%temp%\Liste1.txt
set L2=%temp%\Liste2.txt
set Nr=1000000
if exist %L1% del %L1%
for /f "delims=" %%i in ('dir /s /b /ad "%Basis%"') do call :WriteDirName "%%i"
sort /R %L1% /O %L2%
for /f "tokens=1* delims=:" %%i in (%L2%) do call :ProcessName "%%j"
for /f "delims=" %%i in ('dir /s /b /a-d "%Basis%"') do call :ProcessName "%%i"
del %L1%
del %L2%
goto :eof
:ProcessName
set "Name=%~n1"
set "Name=%Name:~,24%"
if "%~n1"=="%Name%" goto :eof
set Nr=
:Check
if not exist "%~dp1%Name%%Nr%%~x1" goto :RenameIt
set /a Nr+=1
goto :Check
:RenameIt
echo ren %1 "%Name%%Nr%%~x1"
goto :eof
:WriteDirName
set Nr+=1
>>%L1% echo %Nr:~-6%:%~1
goto :eof
Vielleicht etwas übervorsichtig ist das Bearbeiten der Ordnerstruktur "von unten" her - es werden (durch die umgekehrte Sortierung der gesamten Ordnerliste) zunächst die untersten Ebenen umbenannt - so sollte es nicht passieren, dass ein Ordner nicht gefunden wird, weil ein darüberliegender Ordner zwischenzeitlich bereits umbenannt wurde.
Auch in diesem Batch gilt übrigens: Durch das "echo" vor dem "ren" werden die Umbenennungsbefehle vorläufig nur angezeigt (und erst nach dem Entfernen des "echo" tatsächlich ausgeführt).
Grüße
bastla
P.S.: @Biber: In Deinem Batch wäre die Schreibweise von "ProcessFile" in den Zeilen 3 und 6 noch anzugleichen ...