alexx65
Goto Top

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

Content-Key: 144855

Url: https://administrator.de/contentid/144855

Printed on: April 24, 2024 at 20:04 o'clock

Member: Snowman25
Snowman25 Jun 15, 2010 at 09:08:37 (UTC)
Goto Top
@Echo off && setlocal enabledelayedexpansion
set a=0
for /F "delims=" %%I in (test.txt) do (  
	if !a!==1 (
		set b==%%I
		ren text.txt !b:~15,24!.txt
	) 
	set /a a=!a!+1
)
Member: bastla
bastla Jun 15, 2010 at 09:14:32 (UTC)
Goto Top
@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 ...

Grüße
bastla
Member: Snowman25
Snowman25 Jun 15, 2010 at 09:22:57 (UTC)
Goto Top
Zitat von @bastla:
@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 ...
Huch stimmt face-big-smile

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

Grüße
Snow

: PS: : !b:~^!=^^^!! ist schon ein eigenartiges Konstrukt...
Member: bastla
bastla Jun 15, 2010 at 09:32:05 (UTC)
Goto Top
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:
@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"  
Grüße
bastla

[Edit] Um immer das Verzeichnis der Batchdatei zu verwenden, könnte die Zeile 2 auf
set "Datei=%~dp0Test.txt"
geändert werden.
[/Edit]
Member: bastla
bastla Jun 15, 2010 at 09:35:03 (UTC)
Goto Top
@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
Member: Snowman25
Snowman25 Jun 15, 2010 at 09:47:11 (UTC)
Goto Top
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 face-smile
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
)
Member: alexx65
alexx65 Jun 15, 2010 at 09:54:21 (UTC)
Goto Top
Hallo bastla, ja es soll jeweils nur eine einzelne Datei umbenant werden. Sie liegt in dem Verzeichnis, in dem auch die Batch Datei liegen wird, und hat (vor Umbenennung) immer einen identischen Namen, also zB text.txt.
Es geht dabei übrigens um täglich exportierte Kontoauszüge, die das Buchungsdatum als Dateinamen bekommen sollen, und der befindet sich wie geschrieben an einer fixen Position in der 2. Zeile.
Thx für die schnellen Antworten, werde es gleich mal testen!
Member: alexx65
alexx65 Jun 15, 2010 at 10:04:23 (UTC)
Goto Top
Jetzt klappt's! Dein letzter Ansatz macht's genau wie gewünschtface-smile