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???
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
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
6 Kommentare
Neuester Kommentar
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:
Falls aus den ersten beiden Namensbestandteilen (also "ABCDE_0001234500_") alle Nullen entfernt werden sollen, dann so:
Das jeweilige "
Grüße
bastla
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
@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
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
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.
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.