holzhausen
Goto Top

Batch Alle Dateien in einem Ordner umbenennen Punkt durch Unterstrich ersetzen

Guten Tag,

ich möchte gern in einer Batch-Datei alle Dateien in einem Ordner umbenennen. Diet Dateien wurden alle mit "." benannt (Bsp: test.test.test.txt) Nun möchte ich nicht in allen dateien einzeln die Punkt entfernen sondern die per Batch machen.

Über die folgenden Befehle werden alle Punkte ersetzt:

for %%i in ("c:\rename\*.*.*") do (
set "neu=%%~nxi"
ren "%%i" "!neu:.=_!"
)

Leider habe ich das Problem, dass der letzte Punkt nicht ersetzt werden darf, da es sich hier um die Dateiendung handelt.

In dem folgenden Beispiel ist diese Umbenennung nachtäglich durch Stringopertaionen möglich:

set hallowelt=Hallo_Welt_pdf
set letzte=%hallowelt:~-3%
set erste=%hallowelt:~0,-4%
set neu=%erste%.%letzte%

Jedoch schaffe ich es leider nicht diese Idee in einer For-Schleife zu verwirklichen. Kann mir da jemand helfen oder gibt es eine einfachere Lösung?

So sieht meine Lösung bisher aus:

for %%i in ("c:\rename\*_???") do (
set "var=%%~nxi"
set ende=%var:~-3%
set anfang=%var:~0,-4%
set name="%anfang%.%ende%"

Leider wird hier die Variable "var" anscheinend nicht richitg interpretiert und es kann nicht erkannt werden, dass etwas "abgeschnitten" werden soll.

Danke.

Mit freundlichen Grüßen,

D

Content-ID: 204849

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

Ausgedruckt am: 08.11.2024 um 07:11 Uhr

Endoro
Endoro 11.04.2013 aktualisiert um 18:18:59 Uhr
Goto Top
Hallo holzhausen,

versuch doch mal:

 @echo off&setlocal enabledelayedexpansion
for %%i in ("c:\rename\*") do (  
 set "neu=%%~ni"   
 ren "%%~i" "!neu:.=_!%%~xi"  
 )


Gruss!
bastla
bastla 11.04.2013 aktualisiert um 19:48:37 Uhr
Goto Top
... aber nur, wenn in den Dateinamen kein "!" vorkommt - dann besser per Unterprogramm:
@echo off & setlocal
for %%i in ("c:\rename\*.*.*") do set "neu=%%~ni" & call :ProcessFile "%%i"  
goto :eof

:ProcessFile
ren %1 "%neu:.=_%%~x1"  
goto :eof
Wenn auch noch Ordner mit mehr als einem Punkt im Namen enthalten sein sollten (und die Umbenennung nur für Dateien erfolgen darf):
@echo off & setlocal
pushd "c:\rename"  
for /f "delims=" %%i in ('dir /b/a-d *.*.*') do set "neu=%%~ni" & call :ProcessFile "%%i"  
popd
goto :eof

:ProcessFile
ren %1 "%neu:.=_%%~x1"  
goto :eof
Grüße
bastla
Endoro
Endoro 11.04.2013 um 23:11:26 Uhr
Goto Top
Hallo bastla,

die "call"s können auch direkt in der Forschleife gemacht werden.
Das Script wird nicht unbedingt schneller dadurch face-big-smile
@echo off&setlocal
for %%i in (*) do (
set "neu=%%~ni"   
call set "neu=%%neu:.=_%%"  
for /f "delims=" %%j in ('call echo "%%neu%%"') do ren "%%~i" "%%~j%%~xi"  
)

Gruss!
bastla
bastla 11.04.2013 um 23:17:07 Uhr
Goto Top
Hallo Endoro!
Das Script wird nicht unbedingt schneller dadurch face-big-smile
... aber Sicherheit geht vor.

Schneller wird's aber, wenn nicht alle Dateien behandelt werden müssen (deswegen die Vorgabe "*.*.*") ...

Grüße
bastla
Endoro
Endoro 12.04.2013 um 06:52:18 Uhr
Goto Top
Hallo bastla,

ich war auch zu freigiebig mit den calls:
@echo off&setlocal
for %%i in (*.*.*) do (
set "neu=%%~ni"   
for /f "delims=" %%j in ('call echo "%%neu:.=_%%"') do ren "%%~i" "%%~j%%~xi"  
)


Gruss!
holzhausen
holzhausen 12.04.2013 um 07:13:48 Uhr
Goto Top
Vielen Dank!!! Das hat funktioniert! face-smile

Danke für die schnelle Hilfe!!!
bugmenot2
bugmenot2 29.09.2014 aktualisiert um 22:23:13 Uhr
Goto Top
Hallo,

ich habe ein ähnliches Problem. Ich möchte dateien mit ABC_123_a.pdf umbenennen in ABC.123_a.pdf

also der zweite unterstrich soll (wenn vorhanden, auch ABC_123.pdf in ABC.123.pdf sind möglich) bleiben und der erste durch einen punkt ersetzt werden.

wie müsste ich Endoros code dann abändern (sorry bin kein Programmierer)?