Vbscript zum Anfügen von Text in scenery.cfg Datei
Guten Tag an alle
Der folgende Script fügt der Scenery.cfg Datei des Flugsimulators einen Szenerie Eintrag hinzu. Das hatte bisher für den FSX auch geklappt.
Für den Prepar3Dv4 habe ich nun die Pfade angepasst...der Eintrag wird ausgeührt aber der Eintrag besteht nun aus vielen Zeichen!?
Hier der Script:
das Resultat:
Könnte dies daran liegen, dass die Scenery.cfg Datei von Prepar3Dv4 im UTF-16 Format vorliegt ?
Wie kann ich das lösen?
Besten Dank für Vorschläge
Der folgende Script fügt der Scenery.cfg Datei des Flugsimulators einen Szenerie Eintrag hinzu. Das hatte bisher für den FSX auch geklappt.
Für den Prepar3Dv4 habe ich nun die Pfade angepasst...der Eintrag wird ausgeührt aber der Eintrag besteht nun aus vielen Zeichen!?
Hier der Script:
CfgFilePath = "C:\ProgramData\Lockheed Martin\Prepar3D v4\scenery.cfg"
Scen = "MyScenery"
Set fs = CreateObject("Scripting.FileSystemObject")
Set a = fs.OpenTextFile(CfgFilePath, 1, FALSE)
ScenCounter = 0
ScenTitle = "Title=" & Scen
Do While Not a.AtEndOfStream
aLine = a.ReadLine
AddCounter=Instr(1, aLine, "[Area.")
If AddCounter <> 0 Then
ScenCounter = ScenCounter+1
End If
PosTitle=Instr(1, aLine, ScenTitle)
If PosTitle <> 0 Then
a.Close
Set fs = Nothing
WScript.Quit
End If
Loop
a.Close
Set a = fs.OpenTextFile(CfgFilePath, 8, FALSE)
a.WriteLine("[Area." & ScenCounter+1 & "]")
a.WriteLine(ScenTitle)
a.WriteLine("Layer=" & ScenCounter)
a.WriteLine("Active=TRUE")
a.WriteLine("Required=FALSE")
a.WriteLine("Local=Ecosystem\MyScenery")
a.WriteLine("Remote=")
a.WriteLine("")
a.Close
Set fs = Nothing
das Resultat:
[Area.124]
Title=TwentyNine_Palms
Local=Scenery\Cities\TwentyNine_Palms
Layer=124
Active=TRUE
Required=FALSE
[Area.125]
Title=Washington_DC
Local=Scenery\Cities\Washington_DC
Layer=125
Active=TRUE
Required=FALSE
[Area.126]
Title=Bathymetry
Local=Scenery\Bathymetry
Layer=126
Active=TRUE
Required=FALSE
䅛敲崱楔汴㵥祍捓湥牥൹䰊祡牥〽捁楴敶吽啒刊煥極敲㵤䅆卌䰊捯污䔽潣祳瑳浥䵜卹散敮祲敒潭整ഽഊ
Könnte dies daran liegen, dass die Scenery.cfg Datei von Prepar3Dv4 im UTF-16 Format vorliegt ?
Wie kann ich das lösen?
Besten Dank für Vorschläge
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 342286
Url: https://administrator.de/contentid/342286
Ausgedruckt am: 24.11.2024 um 08:11 Uhr
27 Kommentare
Neuester Kommentar
Hallo,
Zeichensatz vorher umstellen bzw. feststellen welcher dar verwendet wird und dann sich auf diesen in dein Skript festlegen. mal mit z.B. Notepadd++ nachschauen.
VBScript Zeichensatz konvertieren
http://www.torsten-horn.de/techdocs/encoding.htm
https://msdn.microsoft.com/de-de/library/windows/desktop/dd317756(v=vs.8 ...
http://www.robvanderwoude.com/vbstech_files_utf8.php
Gruß,
Peter
Zeichensatz vorher umstellen bzw. feststellen welcher dar verwendet wird und dann sich auf diesen in dein Skript festlegen. mal mit z.B. Notepadd++ nachschauen.
VBScript Zeichensatz konvertieren
http://www.torsten-horn.de/techdocs/encoding.htm
https://msdn.microsoft.com/de-de/library/windows/desktop/dd317756(v=vs.8 ...
http://www.robvanderwoude.com/vbstech_files_utf8.php
Gruß,
Peter
Das Filesystem-Object kann kein UTF verarbeiten. Da musst du eine andere Methode verwenden, z.B. das Einlesen und Beschreiben mit dem ADODB Object:
Hier zwei Functions/Subs dafür:
Charset bei Bedarf einfach anpassen.
Gruß
Hier zwei Functions/Subs dafür:
Sub WriteUTF8(file, txt)
With CreateObject("ADODB.Stream")
.Type = 2 : .Charset = "UTF-8" : .Open
.WriteText txt
.SaveToFile file, 2
.Close
End With
End Sub
Function ReadUTF8(file)
With CreateObject("ADODB.Stream")
.Type = 2 : .Charset = "UTF-8" : .Open : .LoadFromFile(file)
ReadUTF8 = .ReadText
.Close
End With
End Function
Gruß
Hallo,
https://ss64.com/nt/chcp.html
Umlaute in Batch-Datei bei Ausgabe richtig darstellen
https://stackoverflow.com/questions/1259084/what-encoding-code-page-is-c ...
https://superuser.com/questions/269818/change-default-code-page-of-windo ...
https://stackoverflow.com/questions/2050973/what-encoding-are-filenames- ...
Auch hier wieder codepage. In was ist deine Datei codiert bzw. abgelegt?
Gruß,
Peter
https://ss64.com/nt/chcp.html
Umlaute in Batch-Datei bei Ausgabe richtig darstellen
https://stackoverflow.com/questions/1259084/what-encoding-code-page-is-c ...
https://superuser.com/questions/269818/change-default-code-page-of-windo ...
https://stackoverflow.com/questions/2050973/what-encoding-are-filenames- ...
Auch hier wieder codepage. In was ist deine Datei codiert bzw. abgelegt?
Gruß,
Peter
Hi,
deine Batchdatei funktioniert einwandfrei mit dem Teilbereich[Area.126] der .cfg, angefügt wird [Area.127] usw.
Musst du mal suchen, @echo on am Anfang und pause am Ende der Batch könnte helfen.
Ich bin aber wieder raus.
Gruß
deine Batchdatei funktioniert einwandfrei mit dem Teilbereich[Area.126] der .cfg, angefügt wird [Area.127] usw.
Musst du mal suchen, @echo on am Anfang und pause am Ende der Batch könnte helfen.
Ich bin aber wieder raus.
Gruß
OK, dann kurz zur Erklärung
- cmd /c startet eine neue cmd.exe Instanz
- /q ist für das Ausschalten des Prompts (wie ECHO OFF)
- /u ist für die Ausgabe im Unicode Format (UTF-16), was der eigentliche Grund für die Aktion ist
Was dir noch fehlt ist die verzögerte Variablenerweiterung mit /v:on um Variablen in Ausrufezeichen zu expandieren.
Grüße
rubberman
- cmd /c startet eine neue cmd.exe Instanz
- /q ist für das Ausschalten des Prompts (wie ECHO OFF)
- /u ist für die Ausgabe im Unicode Format (UTF-16), was der eigentliche Grund für die Aktion ist
Was dir noch fehlt ist die verzögerte Variablenerweiterung mit /v:on um Variablen in Ausrufezeichen zu expandieren.
cmd /v:on /q /u /c "echo [Area.!var!]">>"%file%"
Grüße
rubberman
Zitat von @aletri:
Hallo rubberman
1000 Dank... so klappts mit der Area Nummer und der Layer Nummer!
Was jetz nicht funktioniert ist die Abrage ob Szenerie bereits vorhanden und wenn ja, dann Script nicht Ausführen!
Tipp: findstr und Errorlevel abfragen , genau das machst du ja in Zeile 4 deines Codes.Hallo rubberman
1000 Dank... so klappts mit der Area Nummer und der Layer Nummer!
Was jetz nicht funktioniert ist die Abrage ob Szenerie bereits vorhanden und wenn ja, dann Script nicht Ausführen!
Die Leute lesen ihre eigenen Codes nicht mehr?! Wahrscheinlich wieder Copy n Paster...
Das liegt am UTF16, mach ein type des Files und Pipe das an Findstr, und die Codepage nicht vergessen (chcp)
mach ein type des Files und Pipe das an Findstr
Steht so ja auch schon mal in Zeile 5 alsotype "%file%" | findstr /i /c:"Title=MyScenery">nul || (
und die Codepage nicht vergessen (chcp)
Das wiederum ist nicht nötig. In der Suchzeichenfolge ist nichts was über 7Bit ASCII hinaus geht. Somit also in jeder Single Byte Codierung gleich ...Grüße
rubberman
Hallo,
Gruß,
Peter
Zitat von @aletri:
plötzlich passiert, dass beim Ausführen der Batch die Area und der Layer auf 1 statt auf fortlaufende Nummer gesetzt werden;
Dann liefer auch gleichzeitig die Datenbasis wo es geht und wo es plötzlich nicht mehr geht. Wir raten uns sonst zu tode für dein Bätchle. Es sind doch immer noch ganze Zahlen, oder?plötzlich passiert, dass beim Ausführen der Batch die Area und der Layer auf 1 statt auf fortlaufende Nummer gesetzt werden;
Gruß,
Peter
Was meinst Du mit Datenbasis?
Den Inhalt der .cfg Datei, bei der dieser Fehler auftritt.Vermutlich wird die Zeichenfolge "Area" noch in einer anderen Zeile auftreten. Du kannst die Suche noch etwas verfeinern.
for /f "tokens=2 delims=.]" %%a in ('type %file% ^| findstr /rb "\[Area\.[0-9][0-9]*\]"') do set /a "var=%%a"
/rbi
statt nur /rb
.Grüße
rubberman
Hallo,
Aha Skript geändert weil es ja läuft
Und bitte was ist in der Quelle drin? Nicht das dort noch irgendwelche ungewünschte Zeichen zuhause sind.
Hilfe, mein Auto ist blau, sollte aber rot sein, habe es doch nur Kopiert das grüne das und das Lenkrad ist auch falsch (müsste rund sein)
Bedenke, wir sind hier Blind und Taub und wissen nicht was du vor dir hast. Wir Vermuten nur...
Gruß,
Peter
Aha Skript geändert weil es ja läuft
Resultat:
[Area.126]
Ist das eins deiner Ergebnisse oder was? Ist doch alles OK.[Area.126]
Und bitte was ist in der Quelle drin? Nicht das dort noch irgendwelche ungewünschte Zeichen zuhause sind.
[Area.1] (müsste 127 sein)
Ausgabe oder Eingabe?Hilfe, mein Auto ist blau, sollte aber rot sein, habe es doch nur Kopiert das grüne das und das Lenkrad ist auch falsch (müsste rund sein)
Bedenke, wir sind hier Blind und Taub und wissen nicht was du vor dir hast. Wir Vermuten nur...
Gruß,
Peter
Keine Ahnung. Dein Beispiel funktioniert bei mir problemlos, auch wenn ich dir vorgeturnt hatte dass die echo Kommandozeilen in Anführungszeichen zu setzen sind.
Wie Peter schon sagte, wir sehen deinen Monitor nicht. Somit wissen wir nicht, ob die .cfg Datei exakt diesen Inhalt hat, ob die Batchdatei exakt diesen Inhalt hat und auf welche Art das Script ausgeführt wird.
Grüße
rubberman
Wie Peter schon sagte, wir sehen deinen Monitor nicht. Somit wissen wir nicht, ob die .cfg Datei exakt diesen Inhalt hat, ob die Batchdatei exakt diesen Inhalt hat und auf welche Art das Script ausgeführt wird.
Grüße
rubberman
Hallo,
Nur für dein Verständniss. Es sind die Leerzeichen im Pfadnamen an dennen es happerte. Das siehst du auch aufgrund deiner genauen Fehlermeldung von dir
Nämlich ab dem Leerzeichen muckt deine Batch eben weil es ohne den Hochkommatas nicht mit Leerzeichen umgehen kann. Ist normal.
Du merkst, je mehr Infos kommen je schneller finden sich Bugs
Gruß,
Peter
Nur für dein Verständniss. Es sind die Leerzeichen im Pfadnamen an dennen es happerte. Das siehst du auch aufgrund deiner genauen Fehlermeldung von dir
Error occurred while processing: C:\ProgramData\Lockheed
Du merkst, je mehr Infos kommen je schneller finden sich Bugs
Gruß,
Peter