Benötige Batch File in dem spezifische Variablen in einem txt File durch Werte in einem anderen txt File ersetzt werden

Klendathu

Cadet 3rd Year
Dabei seit
März 2017
Beiträge
45
Hallo,

Ich habe folgendes Problem! Ich möchte in einem .txt File (Replace.txt), das in etwa folgendermaßen aussieht,
ort bus stecke ankunft
xhausen b653 a% yhausen
yhausen a443 a% xhausen
zhausen x434 a% ahausen
Ahausen d543 a% zhausen
die Variablen a% bis d% mit Werten (Zahlenwerten) ersetzen, die in einem zweiten txt file (Values.txt) stehen. Es handelt sich um ca 50 Zeilen in beiden Dokumenten.

Die Zahlenwerte der einen Textdatei sollen die Variablen a% der anderen Textdatei ersetzen.

Ist dies mit Batch möglich?
Vielen Dank für jeden Form von Hilfe!

Lg Klen
 

abcddcba

Commander
Dabei seit
Juni 2018
Beiträge
2.113
Ist dies mit Batch möglich?
Vielen Dank für jeden Form von Hilfe!
willst du nicht langsam mal anfangen es selbst zu versuchen und zu lernen?

Dass dir Powershell zudem schon mehrmals empfohlen wurde, hast du ignoriert ... oder mit Perl oder mit Python ... es kann so einfach sein, warum versuchst du es nicht mal. Du brauchst doch nur ne Schleife und musst String Werte ersetzen.
 

Klendathu

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
März 2017
Beiträge
45
ich bekomme die Batch nicht hin, so dass die Variable ersetzt wird
 

Klendathu

Cadet 3rd Year
Ersteller dieses Themas
Dabei seit
März 2017
Beiträge
45
Oh, okay, sorry:

setlocal ENABLEDELAYEDEXPANSION for /F "tokens=" %%B in (values.txt) do for /F "tokens=" %%A in (Replace.txt) do set str=%A:%x=!B!%

stürzt mit Syntaxfehler ab...

Wie kann ich nochmal den Code im "Kästchen" markieren, so dass er als Code angezeigt wird?

Lg Klen
 

Andreas_

Commander
Dabei seit
Jan. 2017
Beiträge
2.171
Warum nimmst Du nicht andere Werkzeuge, die besser geeignet sind als Batch-Dateien?

Wenn der zu ersetzende String immer an der dritten Stelle steht, dann geht es ziemlich einfach:
Code:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

set source="values.txt"
set replace="Replace.txt"
set result="result.txt"
set /a counter=0

REM leere Zieldatei anlegen
ECHO. 2>%result%

for /F "tokens=1-3,*" %%a in ('type %source%') do (
    call :replace_value %%a %%b %%d !counter!
    set /a counter=!counter!+1
)
GOTO :eof

:replace_value
REM skip funktioniert nicht mit 0
if %4 gtr 0 (set "skip=skip=%4 ") else (set "skip=")
for /F "tokens=* %skip%" %%e in ('type %replace%') do (
    Echo %1 %2 %%e %3 >> %result%
    GOTO :replaced
)
:replaced
Wenn nicht, dann musst Du die Datei zeilenweise einlesen und die Stelle von a% heraus finden. Dann teilst Du den String an der Postion von a% und den Rest kannst Du dann so wie in diesem Beispiel machen ...
 
Top