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:
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
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
Please also mark the comments that contributed to the solution of the article
Content-Key: 298401
Url: https://administrator.de/contentid/298401
Printed on: April 20, 2024 at 06:04 o'clock
6 Comments
Latest comment
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
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
Dann würde ich das etwa so angehen:
Grüße
rubberman
@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
rubberman