Frage von Pascal199412, 30

BATCH Programmierung bestimme Daten auslesen?

Hallo, ich habe bereits mit einer for /f Zeile bewirkt, das eine gesamte .ini Datei ausgelesen und ausgeben wird. Nun ist es aber so das innerhalb dieser .ini Datei Dinge in diesen Klammern stehen: [ ] und andere ohne die Klammern. Nun will ich aber dass innerhalb der Schleife NUR die Sachen ausgegeben werden, die in diesen klammen stehen, die ohne sollen ausgelassen werden. Hätte da einer eine Idee? :)

Antwort
von DataIsBeautiful, 16

Hallo Paxcal199412,

spontan fallen mir 2 Möglichkeiten ein:

1.) Regular Expression (RegEx)
Dies wird in Batch zwar nicht direkt unterstützt, es gibt aber einen Umweg.
Hiermit kannst du sozusagen ein Muster erstellen und es werden nur Sachen ausgegeben, die deinem Muster entsprechen. Könntest also ein Muster erstellen, er dir nur Sachen ausgibt, die in Klammern stehen.

Vorteil: RegEx kann sehr oft gebraucht werden (und ist eine Methode die es in allen "größeren" Programmiersprachen gibt, da es sehr mächtig ist)

2.) Du kannst alles einlesen, und sobald du ein "[" entdeckst eine Variable z.B. "gefunden" auf "True" setzen.
Und falls "gefunden" auf "True" ist, gibst du alles aus.
Falls du ein "]" einliest, dann setzt du "gefunden" auf "False" und gibst damit alles zwischen den Klammern aus.

Grüße,
DataIsBeautiful

Kommentar von anion ,

nabend DataIsBeautiful!
regex in batch zu benutzen ist so ohne weiteres nicht möglich. das erfordert schon externe tools, die man, wenn man sich dafür entscheidet, auch einfach nur aufruft. das ist aber vielleicht für diesen anwendungsfall etwas mit kanonen auf spatzen geschossen.


Kommentar von Pascal199412 ,

Genau das mein ich auch .. Kannst du vllt mal die 2. Option etwas näher erläutern? Hast du vllt sogar ein Syntax, wie ich das in die for /f schleife einbauen kann?
Ich muss natürlich dazu sagen, ich bin noch neu in der Batch Programmiererei und lerne es natürlich noch :)

Antwort
von MarkusGenervt, 6

Schau mal so :

@echo off
REM *** ListIniSectionNames.cmd ***
setlocal enabledelayedexpansion

for /f "usebackq eol=; tokens=1,2* delims==" %%K in (%*) do (
set key=%%~K
if "!key:~0,1!" == "[" (
if "!key:~-1,1!" == "]" (
set section=!key:~1,-1!
echo section
)
) else (
set value=%%~L
)
)

Hier hast Du ein Batch-Gerüst, mit dem Du alle INI-Werte (außer Kommentare) auslesen kannst. Hiermit werden NUR die Section-Names ohne Klammern aufgelistet.

Keine passende Antwort gefunden?

Fragen Sie die Community