Dateiname - bestimmtes Zeichen an unbestimmter Stelle suchen und ersetzen via Batch
Dateinamen sollen nach einem Zeichen durchsucht werden und das dann durch ein bestimmtes ersetzt werden - Variabel sind jeweils die Stellen in dem Dateinamen.
Hallo,
auch nach längerem Suchen, hier im Forum und google, bekomme ich das nicht hin
Folgendes muss ich machen:
Derartige Dateien
ABC%20DEF%20GHIJKLMN%20.pdf
Das%20ist%20ein%20Test%20.txt
Gib%20mir%20bitte%20Leerstellen.doc
ändern in
ABC_DEF_GHIJKLMN_.pdf
Das_ist_ein_Test_.txt
Gib_mir_bitte_Leerstellen.doc
Die Dateinamen beinhalten also unterschiedlich viele Zeichen vor und nach %20
Was ich jetzt suche ist eine Batch die mir %20 in _ ändert.
Hier im Forum finde ich derartiges nur mit einer gleichen Anzahl von Zeichen vor und nach einer Variablen.
Der String ren *%20*.txt *_*.txt führt mich leider immer zu dem Ergebnis:
ABC%20DEF%20GHIJKLMN%20.pdf_.pdf
Das%20ist%20ein%20Test%20.txt_.txt
Gib%20mir%20bitte%20Leerstellen.doc_.doc
PS: Die Verwendung eines Tools ist ausgeschlossen - renameit oä. fällt somit leider weg. Es muss durch ein Skript gelöst werden.
Danke im Voraus für eure Hilfe!
Hallo,
auch nach längerem Suchen, hier im Forum und google, bekomme ich das nicht hin
Folgendes muss ich machen:
Derartige Dateien
ABC%20DEF%20GHIJKLMN%20.pdf
Das%20ist%20ein%20Test%20.txt
Gib%20mir%20bitte%20Leerstellen.doc
ändern in
ABC_DEF_GHIJKLMN_.pdf
Das_ist_ein_Test_.txt
Gib_mir_bitte_Leerstellen.doc
Die Dateinamen beinhalten also unterschiedlich viele Zeichen vor und nach %20
Was ich jetzt suche ist eine Batch die mir %20 in _ ändert.
Hier im Forum finde ich derartiges nur mit einer gleichen Anzahl von Zeichen vor und nach einer Variablen.
Der String ren *%20*.txt *_*.txt führt mich leider immer zu dem Ergebnis:
ABC%20DEF%20GHIJKLMN%20.pdf_.pdf
Das%20ist%20ein%20Test%20.txt_.txt
Gib%20mir%20bitte%20Leerstellen.doc_.doc
PS: Die Verwendung eines Tools ist ausgeschlossen - renameit oä. fällt somit leider weg. Es muss durch ein Skript gelöst werden.
Danke im Voraus für eure Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 130517
Url: https://administrator.de/contentid/130517
Ausgedruckt am: 05.11.2024 um 07:11 Uhr
8 Kommentare
Neuester Kommentar
Moin jonny83,
ich würde mich da nicht mit rumskripten aufhalten für so einen pilpul.
Fackel die Klamotte bei Bedarf mit einer Halbzeile vom CMD-Prompt ab.
[ das ">" nicht mit eingeben; ist Teil meines Prompts]
[das "Echo ren" ist in beiden Schnipseln natürlich nur zum Testen... wenn tatsächlich umbenannt werden soll, das Wort "echo" weglassen]
Falls bei dir "Delayedexpansion" nicht standardmäßig gesetzt ist, kommen noch zwei Worte mehr dazu
... aber selbst dann geht es schneller, diese eine Zeile einzutippseln als zu überlegen, wie denn wohl der Batch hiess, unter dem diese Umbenamserei abgespeichert ist.
Grüße
Biber
ich würde mich da nicht mit rumskripten aufhalten für so einen pilpul.
Fackel die Klamotte bei Bedarf mit einer Halbzeile vom CMD-Prompt ab.
(= 9:52:20 D:\temp=)
>for %i in ("e:\schnipsel\*%20*.*") do @set "neu=%~nxi" & echo ren "%i" "!neu:%20=_!"
ren "e:\schnipsel\ABC%20DEF%20GHIJKLMN%20.pdf" "ABC_DEF_GHIJKLMN_.pdf"
ren "e:\schnipsel\Das%20ist%20ein%20Test%20.txt" "Das_ist_ein_Test_.txt"
ren "e:\schnipsel\Gib%20mir%20bitte%20Leerstellen.doc" "Gib_mir_bitte_Leerstellen.doc"
[das "Echo ren" ist in beiden Schnipseln natürlich nur zum Testen... wenn tatsächlich umbenannt werden soll, das Wort "echo" weglassen]
Falls bei dir "Delayedexpansion" nicht standardmäßig gesetzt ist, kommen noch zwei Worte mehr dazu
(= 9:52:21 D:\temp=)
>setlocal enableDelayedExpansion & for %i in ("e:\schnipsel\*%20*.*") do @set "neu=%~nxi" & echo ren "%i" "!neu:%20=_!"
ren "e:\schnipsel\ABC%20DEF%20GHIJKLMN%20.pdf" "ABC_DEF_GHIJKLMN_.pdf"
ren "e:\schnipsel\Das%20ist%20ein%20Test%20.txt" "Das_ist_ein_Test_.txt"
ren "e:\schnipsel\Gib%20mir%20bitte%20Leerstellen.doc" "Gib_mir_bitte_Leerstellen.doc"
Grüße
Biber
Hallo,
@Biber
in einem Einzeiler geht es dann so:
@jonny83
was dir Biber geschrieben hat, erfüllt den Tatbestand des Durchsuchens nach %20.
Wenn du unbedingt für deine User eine Batch schreiben willst, dann tu Du es, indem du Bibers Einzeiler in eine Batch schreibst und die %-Zeichen verdoppelst.
cu paulepank
@Biber
setlocal enableDelayedExpansion
wirkt nur in einer Batchin einem Einzeiler geht es dann so:
cmd /v:on /c "for %i in ("e:\schnipsel\*%20*.*") do @set "neu=%~nxi" & echo ren "%i" "!neu:%20=_!""
@jonny83
was dir Biber geschrieben hat, erfüllt den Tatbestand des Durchsuchens nach %20.
Wenn du unbedingt für deine User eine Batch schreiben willst, dann tu Du es, indem du Bibers Einzeiler in eine Batch schreibst und die %-Zeichen verdoppelst.
cu paulepank
Moin jonny83,
sorry, war anderweitig beschäftigt.
Wenn es denn nun in Gates Namen eine Batchdatei sein muss, dann anbei dafür eine (mögliche) Syntax unter der Auflage:
Versuch bitte nicht, die Logik der einfachen und doppelten Prozentzeichen irgendwem abends beim Darts in der Kneipe zu vermitteln.
Die Batch sieht - in diesem exotischen Fall - nicht unbedingt leserlicher aus als der CMD-Oneliner, weil...
Grüße
Biber
P.S. @paulepank
Yep, der Hinweis auf "Cmd /v:on" ist berechtigt.
Und eigentlich funktioniert (oder funktioniert geplanterweise) SetLocal EnableDelayedExpansion auch nur im Batch.
sorry, war anderweitig beschäftigt.
Wenn es denn nun in Gates Namen eine Batchdatei sein muss, dann anbei dafür eine (mögliche) Syntax unter der Auflage:
Versuch bitte nicht, die Logik der einfachen und doppelten Prozentzeichen irgendwem abends beim Darts in der Kneipe zu vermitteln.
::--- Renamer.cmd
@echo off & setlocal enableDelayedExpansion
for %%i in ("c:\rename\*%%20*.*") do (
set "neu=%%~nxi"
Echo ren "%%i" "!neu:%%20=_!"
)
Die Batch sieht - in diesem exotischen Fall - nicht unbedingt leserlicher aus als der CMD-Oneliner, weil...
- zwar die eine (logische) Befehlszeile auf 4 optische Zeilen verteilt werden kann
- und ich auch noch in einfachen Worten plausibel rüberbringen kann, dass im Batch aus %i ein %%i, aus %j ein %%j wird etc.
- aber damit der Suchstring "%20" nicht mit einem möglichen Parameter %2 verwechselt werden kann, dazu sind nochmals in vollkommen abstrusen Stellen %-Zeichen einzustreuen.
Grüße
Biber
P.S. @paulepank
Yep, der Hinweis auf "Cmd /v:on" ist berechtigt.
Und eigentlich funktioniert (oder funktioniert geplanterweise) SetLocal EnableDelayedExpansion auch nur im Batch.