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
Registriert
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
 
Klendathu schrieb:
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.
 
  • Gefällt mir
Reaktionen: Raijin und BAGZZlash
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
 
Kannst du mal noch ein Bsp für deine Values.txt reinpacken?

Ansonsten fehlt bei "tokens=X" nicht etwas?
Klendathu schrieb:
Wie kann ich nochmal den Code im "Kästchen" markieren, so dass er als Code angezeigt wird?
cb.png
 
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 ...
 
Zurück
Oben