Mit Batch Datei nach bestimmten Zeichen im Inhalt mit fixer Position umbenennen
Für folgendes Problem suche ich eine Lösung:
Unter Windows möchte ich mit einer Batch Datei eine Datei text.txt umbenennen.
Der neue Dateiname sollen exakt die Zeichen 15 bis 24 des Dateinhalts in der 2. Zeile sein, Endung wie gehabt .txt
Unter Windows möchte ich mit einer Batch Datei eine Datei text.txt umbenennen.
Der neue Dateiname sollen exakt die Zeichen 15 bis 24 des Dateinhalts in der 2. Zeile sein, Endung wie gehabt .txt
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 144855
Url: https://administrator.de/contentid/144855
Ausgedruckt am: 24.11.2024 um 10:11 Uhr
8 Kommentare
Neuester Kommentar
@Snowman25
Abgesehen davon, dass der Teilstring eher mit
gebildet werden sollte, wäre auch zu berücksichtigen, ob die Dateinamen Rufzeichen enthalten (könnten) - in diesem Fall wäre "delayedExpansion" keine so gute Idee ...
Grüße
bastla
Abgesehen davon, dass der Teilstring eher mit
!b:~14,10!
Grüße
bastla
Zitat von @bastla:
@Snowman25
Abgesehen davon, dass der Teilstring eher mit
gebildet werden sollte, wäre auch zu berücksichtigen, ob die Dateinamen Rufzeichen enthalten (könnten) - in diesem
Fall wäre "delayedExpansion" keine so gute Idee ...
Huch stimmt @Snowman25
Abgesehen davon, dass der Teilstring eher mit
!b:~14,10!
gebildet werden sollte, wäre auch zu berücksichtigen, ob die Dateinamen Rufzeichen enthalten (könnten) - in diesem
Fall wäre "delayedExpansion" keine so gute Idee ...
also nochmal:
@Echo off && setlocal enabledelayedexpansion
set a=0
for /F "delims=" %%I in (test.txt) do (
if !a!==1 (
set b==%%I
set b==!b:~^!=^^^!!
ren text.txt !b:~14,10!.txt
)
set /a a=!a!+1
)
Grüße
bastla
bastla
Grüße
Snow
: PS: : !b:~^!=^^^!! ist schon ein eigenartiges Konstrukt...
Hallo alexx65 und willkommen im Forum!
Soll es eigentlich tatsächlich nur um eine einzelne Datei gehen und wenn ja, woran ist diese zu erkennen / wie wird sie ggf übergeben?
Jetzt habe ich's hoffentlich richtig gelesen - falls ja, dann etwa so:
Grüße
bastla
[Edit] Um immer das Verzeichnis der Batchdatei zu verwenden, könnte die Zeile 2 auf
geändert werden.
[/Edit]
Jetzt habe ich's hoffentlich richtig gelesen - falls ja, dann etwa so:
@echo off & setlocal
set "Datei=D:\Test.txt"
set "Zeile="
for /f "usebackq skip=1 delims=" %%i in ("%Datei%") do if not defined Zeile set "Zeile=%%i"
if defined Zeile ren "%Datei%" "%Zeile:~14,10%.txt"
bastla
[Edit] Um immer das Verzeichnis der Batchdatei zu verwenden, könnte die Zeile 2 auf
set "Datei=%~dp0Test.txt"
[/Edit]
@Snowman25
Wenn "delayedExpansion" verwendet wird, kannst Du "!" nicht maskieren - es wird in diesem Fall als Begrenzungszeichen der Variablen einfach verschwinden, bzw wenn es ein zweites "!" in Dateinamen gibt, ist auch der Teil dazwischen weg ...
Grüße
bastla
Wenn "delayedExpansion" verwendet wird, kannst Du "!" nicht maskieren - es wird in diesem Fall als Begrenzungszeichen der Variablen einfach verschwinden, bzw wenn es ein zweites "!" in Dateinamen gibt, ist auch der Teil dazwischen weg ...
Grüße
bastla
Naja. 'nen Versuch wars wert. Ansonsten lässt sich ja auch alles maskieren (oft auch unerwünscht). nur da wo man's braucht gehts wieder net
Also muss man einfach davon ausgehen, dass kein Ausrufezeichen im Textabschnitt vorkommt. Ausserdem sollten Anführungszeichen um den dateinamen im REN-Befehl sein.
funktionierende Version:
Also muss man einfach davon ausgehen, dass kein Ausrufezeichen im Textabschnitt vorkommt. Ausserdem sollten Anführungszeichen um den dateinamen im REN-Befehl sein.
funktionierende Version:
@Echo off && setlocal enabledelayedexpansion
set a=0
for /F "delims=" %%I in (test.txt) do (
if !a!==1 (
set b==%%I
ren test.txt "!b:~14,10!.txt"
)
set /a a=!a!+1
)