Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Zeilen einer Ausgabe mit for in nummerierte Variablen schreiben?

Frage Entwicklung Batch & Shell

Mitglied: Physikuss

Physikuss (Level 1) - Jetzt verbinden

02.03.2010 um 13:43 Uhr, 5204 Aufrufe, 11 Kommentare

Hallo


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:

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

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.
Mitglied: Snowman25
02.03.2010 um 14:56 Uhr

Hallo

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
Bitte warten ..
Mitglied: Physikuss
02.03.2010 um 14:59 Uhr
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 )
Bitte warten ..
Mitglied: Snowman25
02.03.2010 um 15:06 Uhr
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.
Bitte warten ..
Mitglied: LotPings
02.03.2010 um 15:34 Uhr
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
Bitte warten ..
Mitglied: Physikuss
02.03.2010 um 15:48 Uhr
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
01.
@echo on 
02.
setlocal EnableDelayedExpansion 
03.
set /a count=0 
04.
for /f "tokens=2 delims=<>" %%i in ('curl "http://fritz.box/cgi-bin/webcm?getpage=../html/login_sid.xml"') do ( 
05.
set /a count=!count!+1 
06.
set dummy!count! = %%i 
07.
echo Count !count! 
08.
09.
echo Der Count ist !count! 
10.
echo dummy1 !dummy1! 
11.
setlocal DisableDelayedExpansion
Bitte warten ..
Mitglied: LotPings
02.03.2010 um 16:12 Uhr
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
Bitte warten ..
Mitglied: Physikuss
02.03.2010 um 16:40 Uhr
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.
Bitte warten ..
Mitglied: LotPings
02.03.2010 um 17:31 Uhr
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

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
Bitte warten ..
Mitglied: Physikuss
02.03.2010 um 19:32 Uhr
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
01.
echo %dummy!count!%
umsetzten?
Bitte warten ..
Mitglied: Biber
02.03.2010 um 20:34 Uhr
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
Bitte warten ..
Mitglied: Physikuss
03.03.2010 um 12:36 Uhr
Ok, soweit alles klar. Das mit dem Leerzeichen hatte ich schon begriffen.
Aber außderdem war ich mir nicht so ganz sicher, wie das
01.
echo %dummy!count!%
innerhalb der for-Schleife bzw. nach EnabledDelayedExpansion auszusehen hat. Ich werde nochmal ein bisschen testen.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Daten aus dem Feld "date sent" in den Titel schreiben (1)

Frage von ellocko94 zum Thema Batch & Shell ...

Batch & Shell
gelöst Echo Ausgabe ohne Variablenauflösung (9)

Frage von bartek76 zum Thema Batch & Shell ...

Batch & Shell
gelöst In allen Textdateien eines bestimmten Pfades die Zeilen x bis Ende löschen (2)

Frage von Schloth zum Thema Batch & Shell ...

Datenbanken
gelöst MSSQL Datenkonvertierung 1 Zeile auf mehrere Zeilen - bitte um Tips (4)

Frage von highmoe zum Thema Datenbanken ...

Neue Wissensbeiträge
Google Android

Cyanogenmod alternative Downloadquelle

(5)

Tipp von Lochkartenstanzer zum Thema Google Android ...

Batch & Shell

Batch als Dienst bei Systemstart ohne Anmeldung ausführen

(5)

Tipp von tralveller zum Thema Batch & Shell ...

Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Heiß diskutierte Inhalte
Server
gelöst Wie erkennen, dass nur deutsche IPs Zugang zu einer Website haben? (22)

Frage von Coreknabe zum Thema Server ...

Hardware
16-20 Port POE Switch mit VLAN (19)

Frage von thomasreischer zum Thema Hardware ...

Windows Server
Exchange HyperV Prozessorlast (18)

Frage von theoberlin zum Thema Windows Server ...

Windows Userverwaltung
Nicht Administratoren Installation von Software erlauben (14)

Frage von WinLiCLI zum Thema Windows Userverwaltung ...