Batch Serielle Schnittstelle via Batch-Datei prüfen

ChrisK99

Newbie
Registriert
Jan. 2020
Beiträge
4
Hi Leute,

ich habe schon viel programmiert, aber DOS und Batch treiben mich regelmäßig in den Wahnsinn! :-)
(Vor allem brauche ich das gaaaaanz selten!)


Ich muss in einer Batch verifizieren, ob ein COM-Port existiert und ob die Schnittstelle nicht geöffnet ist. Danach möchte ich einen Server starten, der diese Schnittstelle verwendet (daher zuvor die Abfragen).

Das Programm muss von Windows XP bis Win 10 funktionieren, da unsere Kunden viele verschiedene Systeme im Einsatz haben.
(Ich weiß, die Automatisierungsbranche ist träge und unbelehrbar! gg)

Würde ich in einer DOS-Box händisch testen, würde ich das so machen:
1. COM1 existiert und ist frei:
C:\>echo test > com1

2. COM1 existiert, ist aber bereits geöffnet:
C:\>echo test > com1
Zugriff verweigert

3. COM2 existiert nicht:
C:\>echo test > com2
Das System kann die angegebene Datei nicht finden.


Alle meine Versuche, das Ergebnis umzuleiten und dann zu parsen schlugen fehl, also z.B:
Code:
for /f "delims=" %%j in ('"echo test > %myCOM%"') do set rslt=%%j
echo Ergebnis %rslt%

Ebenso die Abfrage auf %errorlevel% und alles andere was mir eingefallen ist (if exist, etc.).

Wenn jemand von Euch mir die Richtung zeigen könnte, wäre ich sehr dankbar! Mir würde es schon helfen, wenn das Ergebnis in einer Variable stehen würde. Parsen schaffe ich dann schon irgendwie...


LG und vielen Dank im Voraus

Chris
 
Code:
mode | findstr "COM3"
gibt mir folgendes aus:
  1. port existiert nicht: %errorlevel% == 1
  2. port existiert und ist verfuegbar: %errorlevel% == 0
  3. port existiert und ist nicht verfuegbar: %errorlevel% == 1
zumindest unter windows 10. denke aber, dass der befehl so alt ist wie die zeit selbst, und das bis xp runter funktionieren koennte.

hth
 
Hi hth,

vielen Dank für Deine Antwort. Leider gibt es unter XP weder mode noch findstr.

LG

Chris
 
Keinen mode-Befehl unter XP? Echt? 😕

Nur zur Sicherheit, falls es kein Tippfehler war: Es muß COM1: heißen mit dem : dahinter. Sonst wäre es eine simple Datei.

Nur... wenn ich mich recht entsinne, dann hat COM doch gar nicht blockiert? Aber gut, ich hab damit mehr zu DOS Zeiten gewerkelt, nicht mehr so sehr unter Windows NT-Systemen.
 
  • Gefällt mir
Reaktionen: ChrisK99
sicher? die seite hier sagt, das gaeb's seit ms dos auf jedem windows... https://www.computerhope.com/modehlp.htm

zumindest fuer windows 10 kann ich bestaetigen, dass handles auf COM-ports exklusiv vergeben werden.

PS: hth ist kurz fuer "hope that helps", kannst mich ruhig bog nennen ;)
 
  • Gefällt mir
Reaktionen: ChrisK99
bog schrieb:
sicher? die seite hier sagt, das gaeb's seit ms dos auf jedem windows... https://www.computerhope.com/modehlp.htm

zumindest fuer windows 10 kann ich bestaetigen, dass handles auf COM-ports exklusiv vergeben werden.

PS: hth ist kurz fuer "hope that helps", kannst mich ruhig bog nennen ;)
Hi Bog,

erstmal vielen Dank für den Hinweis... ich treibe mich leider nicht so viel in Foren herum! gg

Auf dem (Remote-) System an dem ich gerade arbeite gab es weder 'tasklist', noch 'find', noch 'where', etc. Liegt vielleicht daran, dass es ein embedded system ist. Die ersten beiden habe ich schon gefunden und hinüber gespielt, aber find /i hat einen Fehler und funktioniert nicht richtig. Mal sehen, was ich bei uns im Archiv noch finde... :-(

Mich ärgert dennoch, dass ich zu doof bin, die Ausgabe von "echo test > COM1" in eine Variable zu bekommen... Auch unter Win 10 nicht. :-(

LG

Chris

Hi RalphS,

vielen Dank für Deine Hilfe!

RalphS schrieb:
Keinen mode-Befehl unter XP? Echt? 😕

Nur zur Sicherheit, falls es kein Tippfehler war: Es muß COM1: heißen mit dem : dahinter. Sonst wäre es eine simple Datei.

Nur... wenn ich mich recht entsinne, dann hat COM doch gar nicht blockiert? Aber gut, ich hab damit mehr zu DOS Zeiten gewerkelt, nicht mehr so sehr unter Windows NT-Systemen.
Den Teil "Es muß COM1: heißen..." habe ich noch nicht ganz geschnall. Wo meinst Du?

LG

Chris
 
Hi,

damit es in die Datei geht musst du den Befehl klammern.

Code:
(echo test > com1) 2>> test.txt

Hier stehen die Redirection-Syntax Erklärungen: https://ss64.com/nt/syntax-redirection.html

Damit das also bei dir klappt, musst du folgendes tun:

Code:
@echo off
set comPort=COM1

(echo test > %comPort%) 2>"%temp%\comPortParseOutput.txt"
for /f "tokens=* delims=" %%x in ('type "%temp%\comPortParseOutput.txt"') do (
set output=%%x
)
del /q "%temp%\comPortParseOutput.txt"

echo This Is The Output:
echo %output%
 
Zuletzt bearbeitet:
Echo X > stdout.log 2> stderr.log funktioniert schon seit Jahrzehnten so.

Ansonsten, comX ist ein Gerät, ebenso wie LptX und Lw Buchstaben. Da gehört immer ein Doppelpunkt dahinter. X ist nicht dasselbe wie X: und com1 nicht dasselbe wie com1: .
 
  • Gefällt mir
Reaktionen: areiland
Hi Leute,

vielen Dank für Eure Hilfe! Ihr seid spitze! Ich bleibe dennoch dabei... Batch-Programmierung ist einfach nicht mein Ding! gg

Ich musste unter XP die Zeile
Code:
for /f "tokens=* delims=" %%x in (%temp%\comPortParseOutput.txt) do (
übrigens ändern in
Code:
for /f "tokens=* delims=" %%x in ('type "%temp%\comPortParseOutput.txt"') do (

CU

Chris
 
Zurück
Oben