toweli
Goto Top

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]

Content-Key: 100999

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

Printed on: April 16, 2024 at 11:04 o'clock

Member: Jochem
Jochem Nov 04, 2008 at 14:18:24 (UTC)
Goto Top
Moin,
ein Verzeichnis ist aus der Sicht des BS doch auch nichts anderes, als eine Sonderform einer Datei. Also sollten dieselben Kriterien, die für Dateien gelten, doch auch für Verzeichnisse Anwendung finden können.

Gruß J face-smile chem
Member: bastla
bastla Nov 04, 2008 at 14:29:04 (UTC)
Goto Top
Hallo Toweli und willkommen im Forum!

Wenn Du Dein Wunschergebnis beschrieben hättest, könnte hier schon ein Lösungsvorschlag stehen ... face-wink

Grüße
bastla
Member: Biber
Biber Nov 04, 2008 at 14:38:08 (UTC)
Goto Top
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
Member: Toweli
Toweli Nov 04, 2008 at 17:22:35 (UTC)
Goto Top
Hallo Biber, wäre auf jedenfall schonmal nicht schlecht, mann kann es bestimmt umschreiben, dass es auf 24 Zeichen kürzt ;)
Ich habe mich vorhind auch nicht korrekt ausgedrückt, ich brauche ein Tool dass folgendes kann:

- Ordner inklusive aller Unterordner auf max. 24 Zeichen kürzt
- Dateinamen in einem Ordner inkl. aller Unterordner auf max. 24 Zeichen kürzt

logischerweise sollte der datei typ erhalten bleiben und die ersten 24 zeichen vom Orginal Datei Namen.

mfg Toweli
Member: Biber
Biber Nov 04, 2008 at 18:07:04 (UTC)
Goto Top
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:
::---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"  
[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]
Member: bastla
bastla Nov 04, 2008 at 22:12:35 (UTC)
Goto Top
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):
@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
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 ...