noob-x
Goto Top

.txt datei mittels Batch auslesen und mit ausgelesenen Daten umbenennen

Hallo,

ich bekomme viele Textdateien die ich gern nach ihrem Inhalt umbenennen würde.

In der Datei steht immer an der selben Stelle ( Zeile 7, Stelle 63 bis 70 ) eine Zahl
diese Zahl sollte dann den Dateinamen ergeben = 12345678.txt

Bitte um Eure Hilfe


Danke

Andy

Content-Key: 213760

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

Ausgedruckt am: 28.03.2024 um 10:03 Uhr

Mitglied: colinardo
colinardo 08.08.2013 aktualisiert um 17:12:56 Uhr
Goto Top
Hallo Andy,
in Zeile 2 noch den Pfad zu den Textdateien angeben
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "pathTXTFiles=E:\Tempfolder\Scripte"  
pushd "%pathTXTFiles%"  
for /f "tokens=* delims=" %%a IN ('dir /b /a-d *.txt') DO @(  
	call :setfilename "%%a"  
)
popd
goto end

:setfilename
for /f "usebackq skip=6 tokens=* delims=" %%m IN (%*) DO @(  
	set "filename=%%m" & set "filename=!filename:~62,8!"  
   	move %* "!filename!.txt"  
	goto :EOF
)
:end

Grüße Uwe
Mitglied: Endoro
Endoro 08.08.2013 aktualisiert um 17:11:47 Uhr
Goto Top
My 2ct:
@echo off &SETLOCAL
FOR /f "delims=" %%x IN ('dir /b /a-d *.txt') DO (  
	FOR /f "usebackqskip=6delims=" %%a IN ("%%~x") DO (  
		SET "nname=%%a"  
		SETLOCAL ENABLEDELAYEDEXPANSION
		SET "nname=!nname:~62,8!"  
		ECHO REN "%%~x" "!nname!%%~xx"  
		endlocal
	)
)
lg.
Mitglied: bastla
bastla 08.08.2013 aktualisiert um 19:08:53 Uhr
Goto Top
@ Endoro
Bei "delayedExpansion" ist immer zu berücksichtigen, ob in Dateinamen / Strings "!" vorkommen - die Sicherheitsvariante wäre, alle Variablen vor "SETLOCAL ENABLEDELAYEDEXPANSION" zu befüllen und dann nur noch lesend zu verwenden (ich unterstelle mal, dass in der Extension kein "!" enthalten ist, ansonsten auch diese einer Variablen zuweisen):
@echo off &SETLOCAL
FOR /f "delims=" %%x IN ('dir /b /a-d *.txt') DO (  
    FOR /f "usebackqskip=6delims=" %%a IN ("%%~x") DO (  
        SET "nname=%%a" & SET "datei=%%x"  
        SETLOCAL ENABLEDELAYEDEXPANSION
        ECHO REN "!datei!" "!nname:~62,8!%%~xx"  
        endlocal
    )
)
Bei Deinem Ansatz würde eine Datei namens "Ein!kann!vorkommen.txt" auf "Einvorkommen.txt" (wenn %kann% nicht existiert) reduziert, da sich "delayedExpansion" auch auf den Inhalt von Schleifenvariablen auswirkt.

@ colinardo
Da Du von Anfang an "delayedExpansion" verwendest, ergibt sich bei Deiner Version das gleiche Problem ...

Grüße
bastla
Mitglied: Endoro
Endoro 08.08.2013 um 21:31:41 Uhr
Goto Top
@bastla ich weiss, danke nochmal.
Man darf auch nicht callen mit einem Dateinamen huckepack wie colinardo das macht ...
lg.
Mitglied: bastla
bastla 08.08.2013 um 21:35:22 Uhr
Goto Top
@ Endoro
Was meinst Du mit
Man darf auch nicht callen mit einem Dateinamen huckepack
?

Grüße
bastla
Mitglied: Endoro
Endoro 08.08.2013 um 21:42:08 Uhr
Goto Top
@bastla
Ein Beispiel:
@echo off &SETLOCAL
SET "filename=120%%"  
ECHO %filename% vor dem CALL
CALL:sub "%filename%"  
EXIT /b

:sub
ECHO %~1 nach dem CALL
EXIT /b
120% vor dem CALL
120 nach dem CALL
face-smile lg.
Mitglied: bastla
bastla 08.08.2013 um 21:49:48 Uhr
Goto Top
@ Endoro
Andere Baustelle, aber klar - das macht man/frau sich ja zB auch mit einem direkten "call" der Art
call set "Var=%%Var:%Suchen%=%Ersetzen%%%"
zunutze ...

Grüße
bastla
Mitglied: noob-x
noob-x 09.08.2013 um 10:44:10 Uhr
Goto Top
Hallo,


funktioniert genau so wie ich es brauche.

vielen vielen Dank an Alle.

Grüße

Andy