Leerzeichen in Dateinamen in Unterstrich umbenennen via Batch
Hallo Leute,
ich habe da ein (für Euch wahrscheinlich triviales) Anliegen: Ich möchte via Batch Dateien in einem bestimmten Verzeichnis umbenennen. Die Dateien sehen so aus: XX XXXXXXXX_X.tif und sollen so aussehen: XX_XXXXXXXX_X.tif.
Ich will also nur das an der dritten Stelle vorkommende Leerzeichen durch einen Unterstrich ersetzen.
Die aufrufende Batch liegt nicht im Zielverzeichnis, aber das ist sicher das kleinste Problem
Wer kann mich da auf den richtigen Weg bringen oder hat gar direkt eine Lösung dafür parat? Tausend Dank!
fischkopf
ich habe da ein (für Euch wahrscheinlich triviales) Anliegen: Ich möchte via Batch Dateien in einem bestimmten Verzeichnis umbenennen. Die Dateien sehen so aus: XX XXXXXXXX_X.tif und sollen so aussehen: XX_XXXXXXXX_X.tif.
Ich will also nur das an der dritten Stelle vorkommende Leerzeichen durch einen Unterstrich ersetzen.
Die aufrufende Batch liegt nicht im Zielverzeichnis, aber das ist sicher das kleinste Problem
Wer kann mich da auf den richtigen Weg bringen oder hat gar direkt eine Lösung dafür parat? Tausend Dank!
fischkopf
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 105489
Url: https://administrator.de/contentid/105489
Ausgedruckt am: 15.11.2024 um 05:11 Uhr
10 Kommentare
Neuester Kommentar
Moin fischkopf,
willkommen in Forum.
Wenn ich diese Anforderung (Dateien entsprechend einer exakten Wildcard-Spezifikation und in einem Bestimmten Verzeichnis) vorliegen hätte, würde ich es mit einem Oneliner vom CMD-Prompt aus abfackeln und nicht lange rumbätscheln.
Hier mal ein examplarischer proof-of-concept für derartige Dateien im Verzeichnis "e:\work".
Grüße
Biber
willkommen in Forum.
Wenn ich diese Anforderung (Dateien entsprechend einer exakten Wildcard-Spezifikation und in einem Bestimmten Verzeichnis) vorliegen hätte, würde ich es mit einem Oneliner vom CMD-Prompt aus abfackeln und nicht lange rumbätscheln.
>for /f "tokens=1,2" %i in ('dir /b "e:\work\?? *.tif"') do @echo ren "e:\work\%i %j" %i_%j
ren "e:\work\XX XXXXXXXX_X.tif" XX_XXXXXXXX_X.tif
Hier mal ein examplarischer proof-of-concept für derartige Dateien im Verzeichnis "e:\work".
Grüße
Biber
Moin fischkopf,
wenn Du diese CMD-Prompt-zeile in einer Batchdatei verwenden willst, dann müssen die jetzigen einfachen Prozentzeichen ( %i und %j) durch doppelte ersetzt werden (%%i und %%j).
Beispiele dafür und auch für das zeitgesteuerte Starten über Taskplane o.ä. findest Du sicher über die Forumssuche.
Grüße
Biber
wenn Du diese CMD-Prompt-zeile in einer Batchdatei verwenden willst, dann müssen die jetzigen einfachen Prozentzeichen ( %i und %j) durch doppelte ersetzt werden (%%i und %%j).
Beispiele dafür und auch für das zeitgesteuerte Starten über Taskplane o.ä. findest Du sicher über die Forumssuche.
Grüße
Biber
Na ja, fischkopf,
ist handwerklich auch kein großes Problem, aber....
--> irgendwie brauchst Du dann erstmal einen echten Plan B.
Denn wenn per Taskplaner in regelmäßigen Abständen alle *.tif-Dateien um ein "_" an der dritten Zeichenposition "verlängert" werden, dann hast Du am Ende des Jahrtausends ziemlich lange Dateinamen.
Kann ich denn die Zusatzbedingung "alle *.tif, die KEINEN Unterstrich als 3tes Zeichen im Dateinamen haben" unterstellen?
Wenn ja, dann wäre eine Batchskizze:
[Ungetestete Skizze]
Grüße
Biber
ist handwerklich auch kein großes Problem, aber....
--> irgendwie brauchst Du dann erstmal einen echten Plan B.
Denn wenn per Taskplaner in regelmäßigen Abständen alle *.tif-Dateien um ein "_" an der dritten Zeichenposition "verlängert" werden, dann hast Du am Ende des Jahrtausends ziemlich lange Dateinamen.
Kann ich denn die Zusatzbedingung "alle *.tif, die KEINEN Unterstrich als 3tes Zeichen im Dateinamen haben" unterstellen?
Wenn ja, dann wäre eine Batchskizze:
@echo off & setlocal
Set "myTifDir=E:\work"
FOR %%i in ( "%myTifDir%\*.tif") do call :RenameWithUnderscore "%%~nxi"
goto :eof
:RenameWithUnderscore Parameter 1 ist der Dateiname
Set "oldname=%~1"
Set "OldFirst2Chars=%oldname:~0,2%"
Set "OldChars3ToEnd=%oldname:~2%"
IF "%oldname:~2,1%" NEQ "_" (
ECHO Ren "%mytifDir%\%oldname%" "%OldFirst2Chars%_%OldChars3ToEnd%"
REM nach dem Testen: Ren "%mytifDir%\%oldname%" "%OldFirst2Chars%_%OldChars3ToEnd%"
)
goto :eof
Grüße
Biber
Moin fischkopf,
nur kurz zwischendurch zum Syntaxfehler (ich schreibe grad an einem anderen Kommentar)
Grüße
Biber
nur kurz zwischendurch zum Syntaxfehler (ich schreibe grad an einem anderen Kommentar)
- oben fehlte ein schließendes Anführungszeichen
- und es musste heißen "call :gecallterblock" statt "call: gecallterblock" (also SPACE-Doppelpunkt statt umgekehrt)
- Fehler sind oben korrigiert
- das zweite Beispiel habe ich jetzt nicht angesehen
Grüße
Biber
Moin fischkopf,
dann kann es eigentlich nur so sein, dass ich durch das Umbenennen die dynamische Liste des
Dieses Verhalten habe ich zwar noch nicht beobachtet, aber umgehen können wir es bestimmt, wenn wir die "FOR %%i"-Anweisung durch eine Anweisung der Art...
Probier Du es ruhig, wenn Du noch wach bist.... ich mach sonst morgen weiter...
Grüße
Biber
dann kann es eigentlich nur so sein, dass ich durch das Umbenennen die dynamische Liste des
FOR %%i in ("verzeichnis\*.tif) ...
...durcheinanderbringe.Dieses Verhalten habe ich zwar noch nicht beobachtet, aber umgehen können wir es bestimmt, wenn wir die "FOR %%i"-Anweisung durch eine Anweisung der Art...
FOR /F "delims=" %%i in ('dir /b "verzeichnis\*.tif"') do ....
ersetzen.Probier Du es ruhig, wenn Du noch wach bist.... ich mach sonst morgen weiter...
Grüße
Biber