Ausgabe der einzelnen Ergebnisse einer For-Schleife mit Schalter F
Hallo Leute,
besteht die Möglichkeit die Ergebnisse einer For-Schleife(Batch/CMD) in eine für jeden Durchgang erzeugte Variable zu speichern.
Beispiel:
Die Schleife liest die Namen der verbauten Akkus eines Laptop aus. Sollte das Laptop zwei oder mehr Akkus haben, hätte ich gerne,
dass die Namen jeweils in einer Variablen gespeichert werden(z.b. %ba1%, %ba2%, usw.).
Ich bitte darum keine Vorschläge wie: "...nimm ein anderes Programm" oder eine "andere Sprache", etc. machen.
Wenn es nicht in Batch geht, hilft mir eine andere Sprache leider so wenig wie ein externes Proggi.
besteht die Möglichkeit die Ergebnisse einer For-Schleife(Batch/CMD) in eine für jeden Durchgang erzeugte Variable zu speichern.
Beispiel:
FOR /f "tokens=2 delims==" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryStaticData Get DeviceName /Format:list') DO (
echo %%A
set ba=%%A
)
Die Schleife liest die Namen der verbauten Akkus eines Laptop aus. Sollte das Laptop zwei oder mehr Akkus haben, hätte ich gerne,
dass die Namen jeweils in einer Variablen gespeichert werden(z.b. %ba1%, %ba2%, usw.).
Ich bitte darum keine Vorschläge wie: "...nimm ein anderes Programm" oder eine "andere Sprache", etc. machen.
Wenn es nicht in Batch geht, hilft mir eine andere Sprache leider so wenig wie ein externes Proggi.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 349367
Url: https://administrator.de/forum/ausgabe-der-einzelnen-ergebnisse-einer-for-schleife-mit-schalter-f-349367.html
Ausgedruckt am: 22.12.2024 um 18:12 Uhr
11 Kommentare
Neuester Kommentar
Vermutlich so:
Grüße
rubberman
EDIT Sorry, Carriage Return hing noch in der Variablen ...
@echo off &setlocal DisableDelayedExpansion
FOR /f "tokens=1,2* delims=:=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryStaticData Get DeviceName /value^|findstr .^|findstr /n "^"') DO (
for /f "delims=" %%D in ("%%C") do (
set /a "n=%%A"
set "ba%%A=%%D"
)
)
setlocal EnableDelayedExpansion
echo Number of batteries: %n%
for /l %%i in (1 1 %n%) do echo !ba%%i!
pause
rubberman
EDIT Sorry, Carriage Return hing noch in der Variablen ...
Die Anzahl wird zusätzlich in %n% gespeichert (ich gehe davon aus dass du wissen willst wie viele Akkus gefunden wurden). Die Akku-Namen befinden sich in Variablen %ba1% bis %ban%. Die habe ich in meinem Beispiel per FOR /L Schleife ausgeben lassen. Alles eigentlich so wie du es wolltest.
Grüße
rubberman
Grüße
rubberman
Ich hoffe ich konnte mein Prob verständlich erklären
Nicht so richtig.Also, das Schleifenkonstrukt in Zeile 3-8 im Code oben weist die Baterienamen einzelnen Variablen zu (ba1 etc.). Da wird nichts überschrieben, anderenfalls wären die Variablen in der Schleife in Zeile 12 nicht verfügbar.
Was du jetzt aber vorhast, habe ich nicht verstanden. Willst du den jeweiligen Akkus den derzeitigen Ladezustand zuordnen? Hat der Ladezustand immer dieselbe Reihenfolge wie die Batterienamen?
Wie auch immer, die Nummer für die Einzelvariablen ba... muss ja auch für die Ausgabe irgendwoher kommen. Und weil das bei der Zuweisung mittels FINDSTR /N so gut geklappt hat, weiß ich nicht warum du das nun nicht einfach wiederholst.
@echo off &setlocal DisableDelayedExpansion
set "outpath=list.txt"
FOR /f "tokens=1,2* delims=:=" %%A IN ('WMIC /NameSpace:"\\root\WMI" Path BatteryStaticData Get DeviceName /value^|findstr .^|findstr /n "^"') DO (
for /f "delims=" %%D in ("%%C") do (
set "ba%%A=%%D"
)
)
setlocal EnableDelayedExpansion
>"!outpath!" (
FOR /f "tokens=1,2* delims=:=" %%A IN ('WMIC Path Win32_Battery Get EstimatedChargeRemaining /value^|findstr .^|findstr /n "^"') DO (
for /f "delims=" %%D in ("%%C") do (
echo Current !ba%%A! charge is %%D%%.
)
)
)
type "!outpath!"
pause
Grüße
rubberman
Hmm, bei mir funktioniert der Code ohne Probleme. Keine Ahnung. Ich würde es aber trotzdem etwas anders schreiben
Der LEQ Operator steht hier für "kleiner oder gleich" da du sonst bei 9% keine Meldung bekommst. Da die verzögerte Variablenerweiterung eingeschaltet ist, haben die Ausrufezeichen einen Sonderstatus und sind anders zu behandeln ...
Grüße
rubberman
If !lowbatlev! leq 10 >>"!outpath!" Echo The "low battery level" !lowbatlev!%% is reached. Display may go darker^^!
Grüße
rubberman
[OT]
Dann sind aber zwei Vaiablen sinnvoller.
Es gibt den Grenzwert %lowbatlev%, der hart verdrahtet und konstant im Batch hinterlegt ist. Der ist definiert als 10%.
Und es gibt den %actbatlev%, den aktuellen Batterieladezustand , der in der FOR/F-Anweisung rausgefieselt wird und der 67% oder 12% oder 9% sein kann.
Dann sollte auch die Ausgabe mit beiden Infos und beiden Variablen arbeiten
... Echo The "low battery level" !lowbatlev!%% is reached (now !actbatlev!%%). Display may go darker^^!
Grüße
Biber
[/OT]
Dann sind aber zwei Vaiablen sinnvoller.
Es gibt den Grenzwert %lowbatlev%, der hart verdrahtet und konstant im Batch hinterlegt ist. Der ist definiert als 10%.
Und es gibt den %actbatlev%, den aktuellen Batterieladezustand , der in der FOR/F-Anweisung rausgefieselt wird und der 67% oder 12% oder 9% sein kann.
Dann sollte auch die Ausgabe mit beiden Infos und beiden Variablen arbeiten
... Echo The "low battery level" !lowbatlev!%% is reached (now !actbatlev!%%). Display may go darker^^!
Grüße
Biber
[/OT]
Hast du natürlich Recht Die eigentliche Nuss, warum das IF Statement bei @hipfzwirgel in die Hose geht, haben wir aber so vermutlich beide nicht geknackt...
Grüße
rubberman
Grüße
rubberman
Haha, nee verstehe ich auch nicht. Was die Bildschirmausgabe angeht - ich hatte ein TYPE im code um zu überprüfen was in die Datei geschrieben wird. Wenn du das rausschmeißt, dann hast du vermutlich auch keine additionelle Ausgabe mehr.
Grüße
rubberman
PS: Für "reichlich Kindersegen" habe ich schon zu viele graue Haare. Das kommt ein paar Jahre zu spät
Grüße
rubberman
PS: Für "reichlich Kindersegen" habe ich schon zu viele graue Haare. Das kommt ein paar Jahre zu spät