Schleifenausgabe ist leer
Hi,
da ich bisher nur einfache Android-Apps geschrieben habe, bin ich bei Batch noch relativ neu. Jedoch erscheint mir alles bisher relativ simpel und dennoch effektiv. Trotzdem bin ich nun an ein Problem gestoßen, das ich nicht zu lösen vermag. Es ist wahrscheinlich für einen langjährigen Batch-Schreiber relativ offensichtlich. Wahrscheinlich fehlt nur eine Variable, um mein Problem zu lösen, doch ich habe es, wie schon erwähnt, einfach noch nicht geschafft.
Nun, ich möchte die Ausgabe des Befehls
als eine Variable speichern. Wenn ich den Befehl ganz einfach mit
in meine Batch-Datei schreibe, erhalte ich entweder ein sehbares Ergebnis auf meinem mit dem Computer verbundenen Smartphone oder, wenn das Smartphone vom PC nicht erkannt wird, im CMD-Fenster die Ausgabe
Wenn diese Ausgabe, die ich als Variable speichern möchte, erscheint, dann soll diese ungefähr so weitergeleitet werden:
An sich funktioniert die gerade verwendete if Methode eigentlich immer. Das Problem hier ist nur leider, dass, wenn ich
schreibe, die Ausgabe einfach leer ist. Das habe ich überprüft, indem ich einfach
in die Batch hinzugefügt habe, ich als Ausgabe aber nur das
erhalte und das, obwohl ich bei der oben genannten for-Schleife auch bereits die Ausgabe
im CMD-Fenster angezeigt bekomme, die ich mir erwünsche.
Ich habe auch schon versucht mit
die Ausgabe als Datei zu speichern und diese anschließend mit
als Variable wieder zu laden, jedoch ist auch hier wieder das Problem, dass die Datei text mit der Ausgabe leer ist. Somit bin ich nun am Verzweifeln. Es wäre echt suuuper, wenn mir ein netter, erfahrener Batch-Schreiber bei meinem Problem helfen könnte. Vielen vielen lieben Dank schon mal 
Mit freundlichen Grüßen
Nico
da ich bisher nur einfache Android-Apps geschrieben habe, bin ich bei Batch noch relativ neu. Jedoch erscheint mir alles bisher relativ simpel und dennoch effektiv. Trotzdem bin ich nun an ein Problem gestoßen, das ich nicht zu lösen vermag. Es ist wahrscheinlich für einen langjährigen Batch-Schreiber relativ offensichtlich. Wahrscheinlich fehlt nur eine Variable, um mein Problem zu lösen, doch ich habe es, wie schon erwähnt, einfach noch nicht geschafft.
Nun, ich möchte die Ausgabe des Befehls
adb reboot bootloader
call adb reboot bootloader
error: device '(null)' not found
if /i "%ausgabe%"=="error: device '(null)' not found" goto:weiter
for /f "tokens=*" %%a in ('adb reboot bootloader') do set ausgabe=%%a
echo Ausgabe: %ausgabe%
Ausgabe:
error: device '(null)' not found
Ich habe auch schon versucht mit
call adb reboot bootloader > text
set /p ausgabe=<text
Mit freundlichen Grüßen
Nico
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 291727
Url: https://administrator.de/forum/schleifenausgabe-ist-leer-291727.html
Ausgedruckt am: 25.04.2025 um 08:04 Uhr
3 Kommentare
Neuester Kommentar

Moin,
z.B. kompakt geschrieben so
Der Befehl wird den Fehler nicht in StdOut sondern in StdErr ausgeben deswegen erhältst du keine Ausgabe. Das ist aber kein Problem denn man kann StdErr an StdOut umleiten mit 2>&1
Deine FOR-Schleife ist problematisch wenn die Ausgabe des Befehls mehrere Zeilen enthält, denn dann enthält deine gesetzte Variable immer nur den Wert der letzten Zeile, außer man nutzt DELAYEDEXPANSION. Aber wie gesagt, wenn Fehler nur in StdErr landen musst du wie oben die Meldung umleiten um sie verarbeiten zu können.
Gruß grexit
z.B. kompakt geschrieben so
adb reboot bootloader 2>&1 | findstr /ic:"error:" >nul && echo Fehler! || echo Alles OK!
Der Befehl wird den Fehler nicht in StdOut sondern in StdErr ausgeben deswegen erhältst du keine Ausgabe. Das ist aber kein Problem denn man kann StdErr an StdOut umleiten mit 2>&1
Deine FOR-Schleife ist problematisch wenn die Ausgabe des Befehls mehrere Zeilen enthält, denn dann enthält deine gesetzte Variable immer nur den Wert der letzten Zeile, außer man nutzt DELAYEDEXPANSION. Aber wie gesagt, wenn Fehler nur in StdErr landen musst du wie oben die Meldung umleiten um sie verarbeiten zu können.
Gruß grexit
Hallo nico1999.
sorgt dafür, dass das stderr in das stdout integriert wird. Somit lässt sich auch die Fehlerausgabe verarbeiten.
Grüße
rubberman
Ich frag mich nur noch, wofür das 2>&1 steht.
Grundsätzlich werden 3 Standard-Streams für ein Konsolefenster unterschieden:- stdin mit Streamnummer 0 für Eingaben
- stdout mit Streamnummer 1 für (normale) Ausgaben
- stderr mit Streamnummer 2 für Fehlerausgaben
2>&1
sorgt dafür, dass das stderr in das stdout integriert wird. Somit lässt sich auch die Fehlerausgabe verarbeiten.
Grüße
rubberman