drmarksman
Goto Top

Mit Batch eine Datei mit der Kodierung ANSI erstellen?

Guten Tag,
mal wieder eine Frage von mir...

Ich versuche im Moment den Inhalt eines Textdokuments einfach zu ändern.
Dass das ganze jedoch mit Batch nicht so einfach ist kann man sich evt denken. Das Programm funktioniert im Moment ungefähr so:

-Nehme Inhalt aus config.txt und kopiere in neues Dokument (config.txt.bat)
-Lösche .txt
-Suche in config.txt.bat nach bgc:0 und ändere den Wert "0"
-Erstelle neue config.txt und kopiere Inhalt von config.txt.bat hinein
-Löche config.txt.bat

Im Code sieht das so aus:

:changebg
[vorher...](
set sett = bgc
set set = D
)


set "a=0"  
set target=%sett%
set value=%set%
set file=config.txt


for /f "delims=" %%i in ('type "txt\%file%"') do (  
set /a "i+=1"  
echo %%i > txt\%file%.bak
)
pause
for /f "tokens=1,2* delims=:" %%i in (txt\%file%.bak) do (  
	set nval=%%i:%%j
	if "%%i"=="%target%" (  
		set nval=%%i:%value%
	)
	pause
	echo %nval%>> txt\%file%.bak
	pause
)
del txt\%file%
ren txt\%file%.bak %file%
pause
set "a=0"  
for /f "delims=" %%i in ('type "txt\%file%.bak"') do (  
set /a "i+=1"  
echo %%i > txt\%file%
)
pause
del txt\%file%.bak

@ping -n 2 localhost> nul
echo Setting Changed!
echo press any key to go on...
pause> nul
goto start

Mein Problem ist im Moment, dass er:
1. Den Inhalt in der .txt.bat nicht ersätzt sondern nur drunter schreibt. (Ist aber kein Problem das bekomme ich selbst hin.)
2. Den Inhalt den er hineinschreiben soll nicht hineinschreibt sondern sowas wie @echo ist gleich Off oder so. Ich habe schon aus einer anderen Frage / Antwort vernommen das dies an der Codierung liegen könnte. Das ist auch richtig!

Jetzt ist meine Frage wie man dieses Problem umgehen kann bzw die Kodierung von einer neu erstellten Datei automatisch in ANSI ändert?


Lange Fragestellung ich weiß, aber ich brauche eben Hilfe und will es deswegen sehr genau machen.

Danke im Vorraus, bedanke mich aber bei jeder Antwort nochmal einzeln... ;D
Gruß
Dr.Marksman

Content-Key: 298401

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

Printed on: April 16, 2024 at 15:04 o'clock

Member: DrMarksman
DrMarksman Mar 06, 2016 at 16:33:23 (UTC)
Goto Top
Was auch noch wichtig ist, ist das es sich nicht nur um einen sondern um mehrere Werte handelt die geändert werden können/sollen. Deswegen auch das %sett% und %set%
Member: rubberman
rubberman Mar 07, 2016 at 00:08:39 (UTC)
Goto Top
Zu viel Schnickschnack. Die merkwürdigen Ausschmückungen, wie die Laufzeit des Scripts durch einen Ping künstlich zu verlängern und dergleichen, kannst du meinetwegen einbauen wenn das Script funktioniert ...

Wie sieht der Inhalt deiner Datei aus und was willst du durch was ersetzen? (Je realitätsnaher das Beispiel, desto besser die Lösung.)

Grüße
rubberman
Member: DrMarksman
DrMarksman Mar 07, 2016 at 20:37:37 (UTC)
Goto Top
Das Dokument soll im Grunde eine config werden wie man sich vielleicht schon gedaht hat. Da drin sollen am besten Werte stehen die ich einfach zerlegen kann ohne noch groß viel was auslesen muss.
Member: rubberman
rubberman Mar 07, 2016 at 20:57:30 (UTC)
Goto Top
config
Das bedeutet alles und nichts. Bitte beantworte doch einfach meine Frage, incl. Beispiel.

Grüße
rubberman
Member: DrMarksman
DrMarksman Mar 08, 2016 at 06:44:39 (UTC)
Goto Top
es soll sowas drin stehen wie

bgc:0
nickn:DrMarksman

Und so weiter ich kanns dir grade nicht gnenauer sagen weil ich selbst noch nicht alles weiß was da soäter mal drin stehen soll... Aber es sollte irgentwie eine erkennungszeile (bgc) und ein Wert (0) drin stehen. Den Wert müsste man dann verändern könnwn
Member: rubberman
rubberman Mar 08, 2016 at 17:34:11 (UTC)
Goto Top
Dann würde ich das etwa so angehen:
@echo off &setlocal

REM Dateiname
set "configfile=test.config"  

REM Schlüsselworte in der Datei, kommagetrennt (beliebig erweiterbar)
set "keys=bgc,nickn"  

REM Werte auslesen
call :readValues

REM testweise die gelesenen Werte ausgeben
echo bgc=%bgc%
echo nickn=%nickn%

REM Wert ändern
set /a "bgc += 1"  

REM Werte in die Datei zurückschreiben
call :writeValues

REM Was steht in der Datei?
echo ~~~~~~~~~~~~
type "%configfile%"  
pause

REM letzte Zeile des Hauptcodes um die Labels nicht erneut aufzurufen
exit /b

:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::

:readValues
for /f "tokens=1* delims=:" %%i in ('2^>nul type "%configfile%"') do set "%%i=%%j"  
exit /b

:writeValues
setlocal EnableDelayedExpansion
>"!configfile!" (  
  for %%i in (!keys!) do echo %%i:!%%i!
)
endlocal
exit /b
Grüße
rubberman