physikuss
Goto Top

Zeilen einer Ausgabe mit for in nummerierte Variablen schreiben?

back-to-topHallo


ich habe jetzt schon viel versucht, aber ich finde meinen Fehler nicht.
Die Aufgabenstellung ist eigentlich recht simpel:

Ich möchte aus einer Bildschirmausgabe bestimmte Werte auslesen und in Variablen speichern.

Hier nun mein Ansatz:

@echo off
setlocal EnableDelayedExpansion
set /a count=0
for /f "tokens=2 delims=<>" %%i in ('curl "http://fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml"') do (  
    set /a count+=1
    set dummy!count! = %%i
)

Die Bildschirmausgabe besteht in meinem Falle wie gewünscht aus 3 Zeilen, welche in den Variablen dummy1 bis dummy3 gespeichert werden sollen. Leider klappt es offenbar so nicht. Die Variablen werden nicht richtig gesetzt.

Content-Key: 137207

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

Printed on: April 18, 2024 at 22:04 o'clock

Member: Snowman25
Snowman25 Mar 02, 2010 at 13:56:15 (UTC)
Goto Top

back-to-topHallo

ich finde meinen Fehler nicht.
und
@echo off
Passt einfach nicht zusammen.
Lass dir einfach mal alles ausgeben, was relevant ist. Dann findest du deinen Fehler sicherlich.

Gruß
Snow
Member: Physikuss
Physikuss Mar 02, 2010 at 13:59:28 (UTC)
Goto Top
Danke erstmal für den Hinweis.

Der Code, den ich gepostet habe, ist natürlich nicht mein Code, den ich zum Debuggen verwende. Ich wollte nicht mit unnötigen echo-Aufrufen vom Wesentlichen ablenken. Viel eher interessiert mich auch eine allgemeine Lösung für diese Problemstellung:
D.h. man erhält von einem Befehl eine Ausgabe und möchte verschiedene Werte daraus in Variablen speichern. Am liebsten wäre es mir eben mit einer for-in-do Variante, da es dann recht elegant gehen müsste (wenn es geht face-smile )
Member: Snowman25
Snowman25 Mar 02, 2010 at 14:06:03 (UTC)
Goto Top
Und wir sollen uns hinter unsere Glaskugeln setzen und raten, was deine Fritzbox zurückgibt und was letztendlich in %i übrig bleibt?
Überprüfe mal, ob deine Dummy-Variablen überhaupt zugewiesen werden.
Mitglied: 77559
77559 Mar 02, 2010 at 14:34:10 (UTC)
Goto Top
Hallo Physikuss,

wo liegt denn jetzt das Problem?
Bis auf die überflüssigen/falschen Leerzeichen vor und nach der Zuweisung in Zeile 6 funktioniert dein Code doch?
Ich würde aber wegen gleicher Zifferanzahl statt auf 0 auf 1000 initialisieren.
Gib mal als Zeile 8 ein:
Set dummy

Gruß
LotPings
Member: Physikuss
Physikuss Mar 02, 2010 at 14:48:59 (UTC)
Goto Top
Also in %%i steht das richtige drin.
Die Übergabe in einer bestimmten Zeile in eine einzelne Variabel funktioniert auch.
Der Counter zählt wie gewünscht von 1 bis 3.
Daher gehe ich davon aus, dass der Fehler in dem setzen der Variablen liegt (werden nicht gesetzt).

Hier nochmal eine Variante zum Debuggen
@echo on
setlocal EnableDelayedExpansion
set /a count=0
for /f "tokens=2 delims=<>" %%i in ('curl "http://fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml"') do (  
set /a count=!count!+1
set dummy!count! = %%i
echo Count !count!
)
echo Der Count ist !count!
echo dummy1 !dummy1!
setlocal DisableDelayedExpansion
Mitglied: 77559
77559 Mar 02, 2010 at 15:12:14 (UTC)
Goto Top
Hallo Physikuss,

wer lesen kann, ist klar im Vorteil.

in Zeile 6 wird das Leerzeichen vor dem = Teil des Variablennamens und das Leerzeichen dahinter Teil des Inhalts.

Gruß
LotPings
Member: Physikuss
Physikuss Mar 02, 2010 at 15:40:29 (UTC)
Goto Top
Hallo,

hmm... also da brat mir doch einen nen Storch.
Dann scheint mit den echo-Aufrufen nach EnableDelayedExpansion etwas anders zu sein als ich mir das vorstelle. Da kommt bei echo !dummy1! einfach nur: Echo ist ausgeschaltet(OFF) bzw. Echo ist eingeschaltet (ON). Da muss ich ein bißchen nachsitzen.
Jedenfalls funktioniert es so doch.
Danke Snowman und LotPings für die Geduld.
Mitglied: 77559
77559 Mar 02, 2010 at 16:31:59 (UTC)
Goto Top
Zitat von @Physikuss:
Dann scheint mit den echo-Aufrufen nach EnableDelayedExpansion etwas anders zu sein als ich mir das vorstelle.
Ja ich fürchte du musst deine Vorstellung anpassen face-wink

Da kommt bei echo > !dummy1! einfach nur:
Echo ist ausgeschaltet(OFF) bzw. Echo ist eingeschaltet (ON).
In deiner Batch wird ja auch eine andere Variable gesetzt.

"!dummy!" ist ungleich "!dummy !"
Wenn eine Variable nicht gesetzt ist, expandiert der Befehl ja auch nur zu echo ohne etwas dahinter.
Um die Ausgabe des Echo-Status zu vermeiden kannst du direkt hinter dem Echo auch statt eines Leerzeichens folgende Zeichen setzen:
Echo.Punkt
Echo:Doppelpunkt
Echo/Slash
Echo\Backslash
Echo;Semikolon
Echo,Komma
Probier es einfach mal aus.

Gruß
LotPings
Member: Physikuss
Physikuss Mar 02, 2010 at 18:32:11 (UTC)
Goto Top
Hallo,
vielen Dank für die Aufklärung. Leider komme ich nicht ganz bei der Bemerkung
"!dummy!" ist ungleich "!dummy !"
nicht ganz mit. Ich hab die Leerzeichen entfernt und es ändert sich nichts am Verhalten.
Wie müsste ich denn in der Schleife sowas wie
echo %dummy!count!%
umsetzten?
Member: Biber
Biber Mar 02, 2010 at 19:34:24 (UTC)
Goto Top
Moin Physikuss,

du bist im Moment auf der ganz falschen Fährte... es ist alles viel banaler... hat nichts mit enableter expansion oder Sonnenflecken oder so zu tun.

Was du tust in deiner ursprünglichen Zuweisung innerhalb der FOR-Anweisung entspräche am CMD-Prompt:
>for /L %i in (1,1,3)  do @set Dummy%i = %i
## wenn du dann nach Variablen namens "Du<whatever>" fragst:

>set du
Dummy1 = 1
Dummy2 = 2
Dummy3 = 3
## jetzt noch mal mit ohne Leerzeichen rund ums "="

>for /L %i in (1,1,3)  do @set Dummy%i=%i

>set du
Dummy1=1
Dummy1 = 1
Dummy2=2
Dummy2 = 2
Dummy3=3
Dummy3 = 3
[ Das führende ">" nicht mit eingeben, ist mein Prompt]

--> dann siehst du, dass du die Werte [Leerzeichen]1, [Leerzeichen]2 und [Leerzeichen]3 an die Variablennamen "Dummy1[Leerzeichen]", "Dummy2[Leerzeichen]", "Dummy3[Leerzeichen]" zugewiesen hast

Und eine Variable "Dummy1[Leerzeichen]" ist eine ganz andere Variable als "Dummy1"(ohne Leerzeichen).
Aber was geECHOed werden soll und NICHT da ist ist bei "Echo !dummy1!-(ohne Leerzeichen)"... hmmm?

Das versuchte dir das Lordchen vorhin schon zu erklären.

Du warst nur auf die fehlende Komplexität des Fehlers nicht vorbereitet.

Grüße
Biber
Member: Physikuss
Physikuss Mar 03, 2010 at 11:36:38 (UTC)
Goto Top
Ok, soweit alles klar. Das mit dem Leerzeichen hatte ich schon begriffen.
Aber außderdem war ich mir nicht so ganz sicher, wie das
echo %dummy!count!%
innerhalb der for-Schleife bzw. nach EnabledDelayedExpansion auszusehen hat. Ich werde nochmal ein bisschen testen.