nico1999
Goto Top

Windows 8 Kompatibilität meines Batch tools

Hi,

ich habe ein Batch Tool für alle Besitzer eines HTC 10 veröffentlicht, die gern ihr Telefon moden, aber keine 25$ ausgeben wollen oder können, um durch eine App ihr Gerät S-Off zu setzen, damit sie Firmware Updates installieren können. Das tut jedoch eigentlich gar nichts zur Sache. Ein paar Nutzer haben mir geschrieben, dass an einer Stelle das Batch Script bugt und beendet wird, das Terminal Fenster sich also einfach schließt. Auf dem Windows 10 System, mit dem ich arbeite, scheint alles wunderbar zu funktionieren. Nur diese Leute haben Windows 8 oder älter. Hier der Ausschnitt aus dem Tool, an dem das Problem auftritt:

call adb reboot download > cache >NUL
timeout /t 25 /nobreak >NUL
call htc_fastboot getvar all>"cache" 2>&1  
set "cmd="  
for /F "skip=9 delims=" %%i in (cache) do if not defined cmd set "cmd=%%i"  
set cmd=%cmd:~18%

Die Programme adb und htc_fastboot sind im Tool mitgeliefert. Außerdem wird die "cache" Datei erstellt. Das Problem kann also eigentlich nur hier liegen:

set "cmd="  
for /F "skip=9 delims=" %%i in (cache) do if not defined cmd set "cmd=%%i"  
set cmd=%cmd:~18%

Dass es an einer älteren Windows Version liegt ist zwar wahrscheinlich, aber nicht sicher. An einem Dateipfad mit Leertaste wird es dann wahrscheinlich auch nicht liegen, kann ich aber nicht zu 100% ausschließen. Danke schon mal für eure Hilfe. Ich hoffe ihr könnt mir bzw. diesen Nutzern weiter helfen...

Grüße
Nico

Update: Es gab auch Beschwerden über den gleichen Bug von Nutzern mit Windows 10

Weiteres Update: Ich muss die Fehlermeldung abgreifen, somit ist 2>&1 nötig

Content-Key: 313182

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

Printed on: April 25, 2024 at 17:04 o'clock

Member: Friemler
Friemler Aug 21, 2016 updated at 20:15:03 (UTC)
Goto Top
Hallo Nico,

Außerdem wird die "cache" Datei erstellt.

Bist Du da sicher? In Zeile 1 Deines Script-Ausschnitts steht
call adb reboot download > cache >NUL
Damit wird die Ausgabe von adb in die Datei cache umgeleitet, das > NUL würde aber auch eine Umleitung der Ausgabe zum NUL-Device verursachen.

Ich empfehle Dir, Dich hier zunächst mal festzulegen und die Zeile folgendermaßen zu ändern.
call adb reboot download > cache 2>NUL
Somit landen die normalen Ausgaben von adb in der cache-Datei und die Fehlermeldungen werden auf das NUL-Device umgeleitet.


In Zeile 3 schreibst Du dann:
call htc_fastboot getvar all>"cache" 2>&1
Damit landen die normalen Ausgaben und die Fehlermeldungen von htc_fastboot in der cache-Datei. Ich glaube nicht, dass Du das wirklich willst, sonst könnte bei der Auswertung der Datei in Zeile 5 ein Teil einer Fehlermeldung in der Variablen cmd landen. Evtl. ist das auch genau das, was bei Deinem Script schief läuft.

Die Zeile also folgendermaßen ändern:
call htc_fastboot getvar all > "cache" 2>NUL


Wenn es bei der Ausführung von adb und htc_fastboot zu Fehlern kommen kann, musst Du Dich natürlich noch um deren Erkennung und Behandlung kümmern. Dazu könnte es notwendig sein, die Fehler-Ausgaben in eine separate Datei umzuleiten und
diese auszuwerten, bevor Zeile 5 ausgeführt wird.


Zeile 5 ist auch verbesserungsfähig.:
for /F "skip=9 delims=" %%i in (cache) do if not defined cmd set "cmd=%%i" 
Hier willst Du wohl den Inhalt der cache-Datei einlesen und die 10. Zeile verarbeiten.

Da Du schreibst
An einem Dateipfad mit Leertaste wird es dann wahrscheinlich auch nicht liegen, kann ich aber nicht zu 100% ausschließen.
vermute ich mal, dass in der FOR-Klammer nicht wirklich das Wörtchen cache steht, sondern eine Variable.

Ich würde in dem Fall die Zeile folgendermaßen schreiben:
for /f "usebackq skip=9 delims=" %%i in ("%cache%") do if not defined cmd set "cmd=%%i" 

Damit wird sichergestellt, dass der Befehl auch dann fehlerfrei funktioniert, wenn der Pfad in der Variablen %cache% Leerzeichen enthält.

Grüße
Friemler
Member: rubberman
rubberman Aug 21, 2016 at 20:05:49 (UTC)
Goto Top
Hallo Nico,

ohne zu wissen, was sich genau in der "cache" Datei befindet wenn das Script fehlschlägt, ist das kaum zu beantworten. Durchaus möglich, dass Zeichen wie <>|& auftreten, die das verursachen könnten.
Anführungszeichen
set "cmd=%cmd:~18%"
könnten Abhilfe schaffen.

Weiterhin:
call adb reboot download > cache >NUL
Nanu, doppelte Umleitung des StdOut?

timeout /t 25 /nobreak >NUL
TIMEOUT kam glaube ich mit Vista.

Grüße
rubberman