BATCH Programmierung ini Dateien, werte auslesen?

2 Antworten

Das geht relativ einfach mit FOR:

setlocal enabledelayedexpansion

for /f "usebackq tokens=1,2* eol=; delims==" %%K in ("Meine Einstellungen.ini") do (
set key=%%~K
if /i not "!key:~0,1!" == "[" (
set value=%%~L
echo %value%
)
)

Hierbei wird die INI-Datei zeilenweise ausgelesen.

Für eine Windows-konforme INI-Datei werden ";" als Kommentar-Zeichen (eol=Zeilenendmarke) berücksichtigt.

Als Variablen werden %%K (tokens=1,2*) für den Anfang der Zeile bis zum ersten "=" (delims==) gesetzt und alles, was danach kommt, wird %%L (tokens=1,2*) zugeordnet. Ohne das "*" würde der INI-Wert ggf. nur bis zum zweiten "=" ausgelesen werden.

Wenn eine Zeile mit einem "[" beginnt, wird diese ignoriert, da dies eine Sektion einleitet.

"usebackq" wird benötigt, um Doppelte Anführungszeichen für Dateinamen mit Sonderzeichen setzen zu können, da eine solche Angabe sonst als literaler String ausgewertet werden würde.

Der erste Befehl "SETLOCAL …" wird benötigt, um das Setzen einer Variablen innerhalb einer IF-Anweisung erfolgreich auch außerhalb der IF-Anweisung beibehalten zu können. Dadurch ändert sich die Interpretations-Syntax für Variablen und das "%" muss durch das "!" ersetzt werden.

Muss es Batch sein? Mit VBScript bekäme ich es schneller hin:

MsgBox "Wert in x.ini für Test: '" & IniAuslesen("x.ini", "Test") & "'"

Function IniAuslesen(sIni, sSchluessel) IniAuslesen = "" Dim C_FILE_FORREADING : C_FILE_FORREADING = 1 Dim fso Dim oFile Dim sZeile
Set fso = CreateObject("Scripting.FileSystemObject") Set oFile = fso.OpenTextFile(sIni, C_FILE_FORREADING) while not oFile.AtEndOfStream sZeile = oFile.ReadLine() if LCase(Left(sZeile, Len(sSchluessel)+1)) = LCase(sSchluessel) & "=" then IniAuslesen = Mid(sZeile, Len(sSchluessel)+2, 1024) Exit Function end if wend End Function

Danke aber ja es sollte schon Batch sein wenn möglich ..

0
@Pascal199412

Das ist doch asbach ;P

Nee, sorry, über Grundwissen hinaus kann ich dir bei Batch nicht helfen.
Ich finde Batch auch immer sehr schwer zu lesen und damit zu warten, wenn man da Schleifen oder ähnliches einbaut.

0

Was möchtest Du wissen?