Batch Dateien automatisch umbenennen

easy.2ci

Commodore
Registriert
Mai 2006
Beiträge
4.388
Hallo,

ich hab grad einen Knoten im Hirn.

Hab in einem Ordner tausende Dateien liegen, die umbenannt werden müssen. Es müssen vorne 20 Zeichen und hinten 7 Zeichen abgeschnitten werden.

Ich bekomms gerade nicht hin.

Hat jemand auf die schnelle einen Ansatz? Es muss in der cmd laufen, also keine extra Tools.


Ordner und Dateinamen haben keine Leerzeichen, kompliziertes Hantieren mit "" kann also entfallen.
OS: Windows Server 2003
 
wie wäre es per:
Code:
set str=%str:BLA=!%
echo Zeichenkette ist %str%
for /f "tokens=1 delims=!" %%i in ("%str%") do set dat=%%i
echo Zeichenketten geschnitten %dat%
 
das ganze als .bat oder .cmd speichern und am Anfang die Variablen folder, leading und trailing den eigenen Wünschen anpassen (ggf. auch mit %1 %2 %3).
Das Script kürzt Dateinamen auch nur, wenn der Dateiname lang genug ist, um hinterher mindestens 1 Zeichen (+ Erweiterung) lang zu sein.

Hoffe ich bin noch rechtzeitig oder hast Du die Dateien inzwischen per Hand umbenannt? :D

Code:
@echo off
setlocal enabledelayedexpansion

rem Arbeits-Verzeichnis
rem in dem die umzubenennenden Dateien liegen
set folder="c:\test"

rem Anzahl zu loeschender Zeichen
rem vorne
set leading=20
rem hinten
set trailing=7


set /a chars2remove=%leading%+%trailing%

rem aktuelles Verzeichnis merken
pushd .
rem ins Zielverzeichnis wechseln
cd /d "%folder%"

rem Dateinamen kuerzen
for /f "delims=" %%a in ('dir /b *.*') do (
    set filename=%%~na
    set fileext=%%~xa

    rem Aufruf der Funktion strlen
    call:strlen length !filename!
    
    rem Dateinamen nur kuerzen, wenn auch genug Zeichen vorhanden
    if !length! GTR %chars2remove% (
    
        rem vorne x Zeichen weg
        set newfilename=!filename:~%leading%!
        rem hinten y Zeichen weg
        set newfilename=!newfilename:~-0,-%trailing%!
        
        
        ren "!filename!!fileext!" "!newfilename!!fileext!"
    )

)

rem ins Batch-Verzeichnis zurueck
popd

echo on

@rem ueberspringen der Funktionen
@goto :EOF

rem Deklaration von Funktionen
rem Ja, sowas geht in Batch-Files

:strlen
::strlen(length,string)
    set str=%2
    set /a length=0
    :strlenloop
    if defined str (
        set str=!str:~1!
        set /a length+=1
        goto strlenloop
    )
    set %1=%length%
    goto :EOF
 
Danke für die Vorschläge. Ich habe parallel zur Anfrage hier natürlich selbst weiter gebastelt und eine ähnliche Lösung gebastelt wie du HDScratcher. Nur deine Lösung sieht schöner aus und ist halt universeller einsetzbar.

Danke für die Unterstützung. Falls jemand über die Google Suche auf diesen Thread stößt findet er jetzt gute Vorschläge wie sowas umzusetzen ist.
 
Zurück
Oben