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-Key: 204849

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

Printed on: April 18, 2024 at 18:04 o'clock

Member: Endoro
Endoro Apr 11, 2013 updated at 16:18:59 (UTC)
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!
Member: bastla
bastla Apr 11, 2013 updated at 17:48:37 (UTC)
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
Member: Endoro
Endoro Apr 11, 2013 at 21:11:26 (UTC)
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!
Member: bastla
bastla Apr 11, 2013 at 21:17:07 (UTC)
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
Member: Endoro
Endoro Apr 12, 2013 at 04:52:18 (UTC)
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!
Member: holzhausen
holzhausen Apr 12, 2013 at 05:13:48 (UTC)
Goto Top
Vielen Dank!!! Das hat funktioniert! face-smile

Danke für die schnelle Hilfe!!!
Member: bugmenot2
bugmenot2 Sep 29, 2014 updated at 20:23:13 (UTC)
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)?