Vorgegebene Zeichenkette aus Dateinamen entfernen
BS: Windows XP
Ich habe eine Menge an Dateien/Ordnern, die eine bestimmte Zeichenkette enthalten. Die Zeichenkette ist bei allen gleich. Wie muss mein Script aussehen, damit am Ende aus allen Dateien diese Zeichenkette entfernt ist.
Beispiel:
Ausgangspunkt:
Datei234_test.txt
Datei455_U3.txt
Datei56_help.txt
zu entfernende Zeichenkette:
z.B. "atei"
Ergebnis:
D234_test.txt
D455_U3.txt
D56_help.txt
Vielen Dank für eure Mühe
[Edit Biber] Nach Rückfrage bei sWeiss3 auf "Gelöst" und "Geschlossen" gesetzt. [/Edit]
Ich habe eine Menge an Dateien/Ordnern, die eine bestimmte Zeichenkette enthalten. Die Zeichenkette ist bei allen gleich. Wie muss mein Script aussehen, damit am Ende aus allen Dateien diese Zeichenkette entfernt ist.
Beispiel:
Ausgangspunkt:
Datei234_test.txt
Datei455_U3.txt
Datei56_help.txt
zu entfernende Zeichenkette:
z.B. "atei"
Ergebnis:
D234_test.txt
D455_U3.txt
D56_help.txt
Vielen Dank für eure Mühe
[Edit Biber] Nach Rückfrage bei sWeiss3 auf "Gelöst" und "Geschlossen" gesetzt. [/Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 50364
Url: https://administrator.de/contentid/50364
Ausgedruckt am: 15.11.2024 um 07:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo sweiss3 und willkommen im Forum!
Die folgende Batchdatei soll von einem beim Aufruf anzugebenden Ordner beginnend alle darin und in den Unterordnern enthaltenen Dateinamen (nicht auch Ordnernamen) entsprechend Deiner Vorgabe kürzen:
Wenn Du die Datei zB als "Kuerzen.bat" gespeichert hast, würde der Aufruf so aussehen:
Bitte darauf achten, dass die Batchdatei selbst nicht den Namensbestandteil "atei" aufweist und im zu bearbeitenden Pfad liegt, da sie sich sonst selbst umbenennen und sich damit "den Boden unter den Füßen wegziehen" würde.
Grüße
bastla
Die folgende Batchdatei soll von einem beim Aufruf anzugebenden Ordner beginnend alle darin und in den Unterordnern enthaltenen Dateinamen (nicht auch Ordnernamen) entsprechend Deiner Vorgabe kürzen:
for /f "delims=" %%i in ('dir "%1\*atei*" /s /b /a-d') do call :ProcessFile "%%i"
goto :eof
:ProcessFile
set "DName=%~nx1"
ren %1 "%DName:atei=%"
Kuerzen D:\Adm
Grüße
bastla
Hallo sweiss3!
Wenn Du beim Aufruf sowohl Pfad (%1) als auch Namensbestandteil (%2) übergibst, musst Du zunächst %2 weiterreichen (immer mit Berücksichtigung ev Leerstellen unter " gesetzt). Danach müsste die "DelayedExpansion" der Variablen "DName" dafür sorgen, dass die Begrenzungszeichen (% vs !) nicht kollidieren, daher also etwa:
Grüße
bastla
Wenn Du beim Aufruf sowohl Pfad (%1) als auch Namensbestandteil (%2) übergibst, musst Du zunächst %2 weiterreichen (immer mit Berücksichtigung ev Leerstellen unter " gesetzt). Danach müsste die "DelayedExpansion" der Variablen "DName" dafür sorgen, dass die Begrenzungszeichen (% vs !) nicht kollidieren, daher also etwa:
@echo off & setlocal enabledelayedexpansion
for /f "delims=" %%i in ('dir "%~1\*%~2*" /s /b /a-d') do call :ProcessFile "%%i" "%~2"
goto :eof
:ProcessFile
set "DName=%~nx1%"
echo ren %1 "!DName:%~2=!"
Grüße
bastla