2016-03-28 3 views
1

Mein GPS-Gerät sendet am COM-Port die NMEA-Infos. Ich möchte die Zeitinfo extrahieren und die Systemzeit einstellen. IchBatch-Datei Einstellung Systemzeit mit GPS

In einer Charge schrieb:

type COM2 | find "GPRMC" 

bringt mir die erforderlichen Informationen - aber kontinuierlich. Beispiel (erste 3 Zeilen):

$GPRMC,100211.279,V,4816.1496,N,01623.0965,E,0.00,0.00,280316,,,N*7A 
$GPRMC,100212.279,V,4816.1496,N,01623.0965,E,0.00,0.00,280316,,,N*79 
$GPRMC,100213.279,V,4816.1496,N,01623.0965,E,0.00,0.00,280316,,,N*78 

Also der nächste Batch-Befehl nie ausgeführt wird, weil das GPS-Gerät so lange sendet, wie es auf ist.

Ich möchte das zweite Feld extrahieren, wie im Beispiel ist es 100211 und das ist 10:02:11 UTC Zeit.

Grüße

+0

Ist' Kopie COM2: CON? – JosefZ

Antwort

1

können Sie verwenden:

@echo off 
for /f "tokens=2 delims=,." %%a in ('type COM2 ^| find "GPRMC"') do (
    set "comTime=%%a" 
    goto :break 
) 
:break 
set "comTime=%comTime:~0,2%:%comTime:~2,2%:%comTime:~4,2% 
echo %comTime% 
pause 

Hier wird die Zeit der ersten Zeile in der Datei in die Variable ComTime im Format hh: mm: ss

HINWEIS

Dies entfernt die .279 Teil der Zeit, um diese Teiländerung delims=,. zu delims=,

zu halten
+1

Dank Denis, da das GPS-Gerät kontinuierlich sendet, hängt Ihre 'for-Schleife'. Es kommt nie zur Pause. ;-( –

0

Das nächste Code-Snippet würde Zeile (n) von einer endlosen Befehlsausgabe übernehmen.

  • Vermeiden | Rohr find oder findstr (read more, see Pipes and CMD.exe paragraph).
  • über Verzögerung Denken (s), verursacht durch ...
    • ... beteiligt timeout Befehle,
    • ... Umgang mit temporären Dateien und
    • ... Prozesskosten (cmd, taskkill, for).

Getestet ping localhost -4 -t endlos mit: auch `kontinuierlichen Strom:

@ECHO OFF 
SETLOCAL EnableExtensions DisableDelayedExpansion 
set "mycommand=type COM2" 
set "mytestval=$GPRMC" 
rem next two lines are merely for my tests: remove them both 
set "mycommand=ping localhost -4 -t" 
set "mytestval=Reply" 
start "bubu36260096" cmd /C ^>"%temp%\aux36260096.txt" %mycommand% 
>NUL timeout /T 3 /NOBREAK 
>NUL taskkill /T /F /FI "IMAGENAME eq cmd.exe" /FI "WINDOWTITLE eq bubu36260096" 
>NUL timeout /T 1 /NOBREAK 
rem     v--- skip as many lines as you need 
for /f "usebackq skip=1 tokens=1,2 delims=, " %%a in ("%temp%\aux36260096.txt") do (
    rem         ^--- remove this blank space in above line 
    if "%%a"=="%mytestval%" ( 
     set "comTime=%%b" 
     goto :break 
    ) 
) 
:break 
rem next line for debugging purposes only 
type "%temp%\aux36260096.txt" 
rem set "comTime=%comTime:~0,2%:%comTime:~2,2%:%comTime:~4,2% 
echo comTime ... "%comTime%" 
pause