ipzipzap
Goto Top

Wie Leerzeichen aus Batch-For-Variable entfernen?

Hallo,

ich habe aus einem System ein Status-File, welches ich weiterverarbeiten möchte. Das File ist eine ASCII-Textdatei und sieht wie folgt aus:

01: E: RC:OFF Z:0 V:612 V:1.05 20110301 16:44:31
02: Offline
03: E: RC:OFF Z:0 V:612 V:1.05 20110301 16:44:31
04: E: RC:OFF Z:0 V:612 V:1.05 20110301 16:44:31
05: Offline
06: Offline
07: Offline
...

Nun möchte ich eine BATCH-Datei haben, die mir den Online oder Offline Status einer ID zurückliefert. Wenn ich also z.B.

STATUS.BAT 01

eintippe, soll als Ausgabe ONLINE kommen.... bei ID 02 entsprechend OFFLINE usw.... zusätzlich brauche ich als Rückgabewerte auch noch ERRORLEVEL 0 und 1.

Mit der folgenden FOR-Schleife:

for /f "delims=: tokens=1,2" %%i in ('findstr "%1: " status.txt') do (  
echo ID    : %%i
echo Status: %%j
)

bekomme ich die richtigen Werte in zwei Variablen geliefert, nur hat die Statusvariable %j ja jetzt ein führendes Leerzeichen. Wie bekomme ich das nun am elegantesten weg?

Gruß,
Dino

Content-Key: 165643

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

Ausgedruckt am: 28.03.2024 um 12:03 Uhr

Mitglied: bastla
bastla 04.05.2011 um 15:12:25 Uhr
Goto Top
Hallo ipzipzap und willkommen im Forum!

Du musst kaum etwas ändern (wenn Du nicht tatsächlich "Online" als Ausgabe erhalten willst):
@echo off & setlocal
for /f "tokens=1,2 delims=: " %%i in ('findstr /c:"%1: " status.txt') do (  
    echo ID    : %%i
    echo Status: "%%j"  
)
Die Anführungszeichen in Zeile 4 sind nur als Demo gedacht, und wenn du tatsächlich auch das Leerzeichen nach dem ":" suchen lassen willst (was wegen der enthaltenen Zeit-Angaben sinnvoll ist), benötigt "findstr" den Schalter "/c:" ...

Grüße
bastla
Mitglied: ipzipzap
ipzipzap 04.05.2011 um 15:24:20 Uhr
Goto Top
Wie war das noch mit dem Wald und den Bäumen? *g*

Ich dachte, bei "delims" kann man immer nur einzelne Zeichen angeben.

Danke, das hilft mir erstmal weiter. Ich möchte die Variablen noch weiterverarbeiten, und da kann ich das Leerzeichen nicht gebrauchen.
Die Ausgabe "Online" oder "Offline" kann ich ja jetzt noch per IF Abfragen machen.

Und das Leerzeichen nach dem ":" war gewollt, richtig face-smile


Thx
Mitglied: ipzipzap
ipzipzap 04.05.2011 um 15:25:58 Uhr
Goto Top
achso.... wozu ist das "setlocal" am Anfang gedacht?
Mitglied: bastla
bastla 04.05.2011 um 18:47:39 Uhr
Goto Top
Hallo ipzipzap!
wozu ist das "setlocal" am Anfang gedacht?
Da die Weiterverarbeitung ja ohnehin schon im Raum stand face-wink: Dort wirst Du auch andere als nur Schleifen-Variablen benötigen, deren Wert aber nur in diesem Batch Bedeutung hat - genau das erreichst Du mit "setlocal": Alle danach erfolgten Änderungen an schon bestehenden und alle neu erstellten Variablen werden nach dem zugehörigen "endlocal" (wird automatisch am Ende des aktuellen Batches ausgeführt) "vergessen" ...

Ob diese "Vorsichtsmaßnahme" in diesem Fall nötig ist, kann ich zwar nicht abschätzen, aber im Zweifelsfall hast Du zumindest keine Nachteile zu erwarten, daher kannst Du "setlocal" standardmäßig am Beginn eines Batches setzen.

Grüße
bastla