n0cturne
Goto Top

Variable aus ini Datei auslesen und weiterverwenden

Hallo zusammen,

ich habe eine settings.ini Datei, die unter anderem folgendes beinhaltet:

[Settings]
port=1313

Nun möchte ich den Port auslesen um mit dem Wert weiterarbeiten zu können.
Wie mache ich das?

Content-ID: 308111

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

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

Kraemer
Kraemer 24.06.2016 um 11:43:33 Uhr
Goto Top
Moin,

dafür gibt es hier diverse Lösungen.

Gruß Krämer
n0cturne
n0cturne 24.06.2016 um 14:27:16 Uhr
Goto Top
In meinem Fall kann ich mich leider nicht auf die Zeilennummer beziehen.
Hier muss schon explizit nach dem Eintrag gesucht werden
Kraemer
Kraemer 24.06.2016 um 14:49:02 Uhr
Goto Top
Hi,

entweder du hast das nicht richtig gelesen oder nicht richtig verstanden.
Wenn du den Code von miniversum nutzt bekommst du als Ergebnis: port=1313
Das Ergebnis musst du dann nur noch zerlegen und fertig.
Kraemer
Kraemer 24.06.2016 um 14:54:04 Uhr
Goto Top
Wat solls - weil heute Freitag ist:

echo off
cls
FOR /F "delims=:" %%i in ('findstr /N /B /L /C:"[Settings]" "C:\Temp\Test.ini"') do set zeile=%%i  
set "wert="  
FOR /F "skip=%zeile% delims=" %%i in ('type "c:\Temp\Test.ini"') do if not defined wert set wert=%%i  
echo %wert:~5%
n0cturne
n0cturne 24.06.2016 um 15:01:30 Uhr
Goto Top
Ok, da mangelte es am Verständnis. ;)
Danke und schönes Wochenende!
n0cturne
n0cturne 24.06.2016 um 15:44:57 Uhr
Goto Top
" delims="" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

face-sad
Habe nur die Sektion und die Datei samt Pfad angepasst.
Kraemer
Kraemer 24.06.2016 um 16:03:24 Uhr
Goto Top
Poste deine Version mal hier (copy and paste)
n0cturne
n0cturne 24.06.2016 um 16:40:58 Uhr
Goto Top
findstr /N /B /L /C:"[Settings]" "c:\Matrix\MatrixUniversal\etc\universalpos.ini"  
FOR /F "delims=:" %%i in ('findstr /N /B /L /C:"[Settings]" "c:\Matrix\MatrixUniversal\etc\universalpos.ini"') do set zeile=%%i  
set "wert="  
FOR /F "skip=%zeile% delims=" %%i in ('type "c:\Matrix\MatrixUniversal\etc\universalpos.ini"') do if not defined wert set wert=%%i  

Inhalt der ini ist folgender:
[Log]
Level = ALL
File = var/log/universalpos.log
maxsize = 1000000

[Settings]
;Autologoffdelay = 60
Datapath = c:\matrix\MatrixData
port=1313
deeplog=true

Hierbei ist nicht fix definiert, welcher Wert in welcher Zeile steht.
batchnewbie
batchnewbie 24.06.2016, aktualisiert am 28.06.2016 um 16:56:49 Uhr
Goto Top
Hier, das sollte laufen, ist der Code von Kraemer nur etwas angepasst:
@echo off
cls

:: hier kommt dein ganzer Pfad
set "Verzeichnis=%~dp0"  
set "Gesucht=port"  
set "Wert="  

FOR /F "delims=:" %%i in ('findstr /N /B /L /C:"%Gesucht%" "%Verzeichnis%\universalpos.ini"') do set zeile=%%i  
echo. %Gesucht% liegt in %zeile% Zeile
set /a zeile=%zeile%-1
FOR /F "skip=%zeile% tokens=2 delims==" %%i in ('type "%Verzeichnis%\universalpos.ini"') do if not defined Wert set Wert=%%i  
echo. Wert von %Gesucht% ist %Wert%
pause>nul
Edit: Zeile (05) mit dem richtigen Pfad anpassen!
n0cturne
n0cturne 28.06.2016 um 14:13:02 Uhr
Goto Top
Nein, leider bekomme ich immernoch einen Syntaxfehler.
Schon das Auslesen der Zeile schlägt fehl.
Kraemer
Kraemer 28.06.2016 um 15:07:46 Uhr
Goto Top
Dann versuche es mal damit:

@setlocal enableextensions enabledelayedexpansion
@echo off
set file=%~1
set area=[%~2]
set key=%~3
set currarea=
for /f "usebackq delims=" %%a in ("!file!") do (  
    set ln=%%a
    if "x!ln:~0,1!"=="x[" (  
        set currarea=!ln!
    ) else (
        for /f "tokens=1,2 delims== " %%b in ("!ln!") do (  
            set currkey=%%b
            set currval=%%c
            if "x!area!"=="x!currarea!" if "x!key!"=="x!currkey!" (  
                echo !currval!
            )
        )
    )
)
endlocal
batchnewbie
batchnewbie 28.06.2016 um 16:52:54 Uhr
Goto Top
Hi, versuche es damit:
@echo off & setlocal enabledelayedexpansion
cls
:: Pfad & iniDatei hier
set "Pfad=c:\Matrix\MatrixUniversal\etc\"  
set "OrginiDatei=universalpos.ini"  
set "Abschnitt=[Settings]"  
set "Schluessel=port"  
set "gefunden="  
pushd %Pfad% || goto :eof
for /f "delims=" %%i in (%OrginiDatei%) do (  
   set "line=%%i"  
   if "%%i"=="%Abschnitt%" set gefunden=1  
     if defined gefunden (
        if "!line:~0,5!"=="%Schluessel%=" echo Port Wert: !line:~5! &set "gefunden="  
     )
)
popd
pause>nul
Port wird nur gelesen, wenn es im Abschnitt [Settings] steht.
n0cturne
n0cturne 29.06.2016 um 10:55:12 Uhr
Goto Top
Das klappt leider auch nicht.
Weder "gefunden" noch "line" bekommen einen Wert.
Kraemer
Kraemer 29.06.2016 aktualisiert um 13:28:50 Uhr
Goto Top
Mein letztes Beispiel funktioniert. Habs mit deinen Daten getestet.
batchnewbie
batchnewbie 29.06.2016 um 12:55:26 Uhr
Goto Top
Hi,
tut mir leid dann weiß ich auch nicht weiter...
n0cturne
n0cturne 29.06.2016 um 13:37:13 Uhr
Goto Top
@Kraemer: Dann habe ich meine Variablen falsch gesetzt. Wo müssen welche Werte rein?
Kraemer
Kraemer 29.06.2016 um 14:06:14 Uhr
Goto Top
Klitzekleine Änderung:

@setlocal enableextensions enabledelayedexpansion
@echo off
set file=%~1
set area=[%~2]
set key=%~3
set currarea=
for /f "usebackq delims=" %%a in ("!file!") do (  
    set ln=%%a
    if "x!ln:~0,1!"=="x[" (  
        set currarea=!ln!
    ) else (
        for /f "tokens=1,2 delims== " %%b in ("!ln!") do (  
            set currkey=%%b
            set currval=%%c
            if "x!area!"=="x!currarea!" if "x!key!"=="x!currkey!" (  
                exit /b !currval!
            )
        )
    )
)
endlocal

Als Hammer.cmd speichern und dann wie folgt aufrufen:
Hammer.cmd c:\test.ini Settings port
echo %errorlevel%