wollebee
Goto Top

Bestimmte Zeichen per Batch aus Dateinamen entfernen

Ich bekomme Dateien, bei denen ich automatisch per Batch den Dateinamen ändern möchte. Nun besteht der erste Teil des Dateinamens aus immer den gleichen Zeichen, der zweite Namensteil aus variablen Zeichen. Also so: ABCDE_0001234500_zzzzzzzzzzz.txt wobei ABCDE_0001234500_ immer gleich ist und zzzzzzzz immer verschieden. Jetzt möchte ich die Nullen aus dem ersten Teil des Dateinamens enfernen. Das Ergebnis sollte dann so aussehen: ABCDE_12345_zzzzzzzzz.txt. wobei der zzzzzzz Teil variabel bleibt. Ich hab schon den halben Tag mit Rename und diversen Wildcards rumgefuscht, bekomme es aber nicht hin. Wer weiß Rat???

Content-ID: 276984

Url: https://administrator.de/forum/bestimmte-zeichen-per-batch-aus-dateinamen-entfernen-276984.html

Ausgedruckt am: 21.02.2025 um 11:02 Uhr

Qugart
Lösung Qugart 10.07.2015, aktualisiert am 13.07.2015 um 08:37:11 Uhr
Goto Top
Mit der "normalen" Shell geht das nicht, wohl aber mit Powershell.

get-childitem *.txt | rename-item -newname { $_.name -replace '0001234500','12345' }
bastla
Lösung bastla 10.07.2015, aktualisiert am 13.07.2015 um 08:37:59 Uhr
Goto Top
Hallo wollebee!

Wenn es wirklich nur darum ginge, aus dem konstanten "ABCDE_0001234500_" ein "ABCDE_12345_" zu machen, würde das in der "normalen Shell" (als Batch) so gehen:
@echo off & setlocal
pushd "D:\Dein Ordner"  
for /f "tokens=1,2* delims=_" %%a in ('dir /b /a-d "ABCDE_0001234500_*.txt"') do echo ren "%%a_%%b_%%c" "%%a_12345_%%c"  
popd
Falls aus den ersten beiden Namensbestandteilen (also "ABCDE_0001234500_") alle Nullen entfernt werden sollen, dann so:
@echo off & setlocal
pushd "D:\Dein Ordner"  
for /f "tokens=1,2* delims=_" %%a in ('dir /b/a-d "ABCDE_0001234500_*.txt"') do (  
    set "A=%%a" & set "B=%%b"  
    setlocal enabledelayedexpansion
    echo ren "%%a_%%b_%%c" "!A:0=!_!B:0=!_%%c"  
    endlocal
)
popd
Das jeweilige "echo" vor dem "ren" sorgt dafür, dass der Befehl für das Umbenennen nur angezeigt wird - erst wenn es entfernt wird, werden die Namen tatsächlich geändert ...

Grüße
bastla
Qugart
Lösung Qugart 11.07.2015, aktualisiert am 13.07.2015 um 08:36:15 Uhr
Goto Top
Stimmt, geht auch in der Windows-Shell, nur eben nicht mehr wie unter reinem DOS.

Hab rumexperimentiert und folgendes geht auch:

@echo off
Setlocal enabledelayedexpansion

Set "Pattern=ABCDE_0001234500_"
Set "Replace=ABCDE_12345_"

For %%# in ("C:\Ordner\*.txt") Do (
Set "File=%%~nx#"
Ren "%%#" "!File:%Pattern%=%Replace%!"
)

Pause&Exit


Gibt wahrscheinlich noch zig weitere Möglichkeiten.
wollebee
wollebee 13.07.2015 um 08:35:35 Uhr
Goto Top
Ganz herzlichen Dank. Gleich die erste Antwort hat das Problem gelöst!
wollebee
wollebee 13.07.2015 um 08:36:07 Uhr
Goto Top
Vielen Dank!
wollebee
wollebee 13.07.2015 um 08:38:38 Uhr
Goto Top
Super, vielen Dank für die Mühe....