2016-03-28 24 views
1

GPS cihazım, NMEA bilgilerini COM bağlantı noktasına gönderir. Zaman bilgisini ayıklamak ve sistem saatini ayarlamak istiyorum. Yığın dosya ayarı sistem zamanı GPS ile

toplu olarak yazdım:

type COM2 | find "GPRMC" 

bana gerekli bilgi getiriyor - ama sürekli. Örnek (ilk 3 hat): GPS cihazı sürece üzerinde olduğu gibi gönderiyor çünkü

$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 

Yani gelecek toplu komut, hiçbir zaman yürütülür.

İkinci alanı ayıklamak istiyorum, örneğin, 100211 ve bu 10:02:11 UTC zamanı.

selam

+0

'kopya COM2 mi: yanı' sürekli akışı: CON? – JosefZ

cevap

1

Bu kullanabilirsiniz: dd: ss

NOT

@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 

Bu biçim hh değişken comTime dosyanın ilk satırın süresini belirler

Bu bölüm, o bölümün delims=,. değerini delims=,

olarak değiştirmek için, bu .279 bölümünü kaldırır.
+1

Teşekkürler Denis, GPS cihazı sürekli olarak gönderdiği için, 'for döngüsü' kilitleniyor. Asla mola gelmez. ;-( –

0

Sonraki kod snippet'i, bitmeyen bir komut çıktısından satırları alacaktı.

  • kaçının find veya findstr (read more, see Pipes and CMD.exe paragraph) için | borusu.
  • tarafından ...
    • ... neden gecikme (ler) düşünün süreç (cmd, taskkill, for) taşıma ... Geçici dosya ve
    • taşıma ... timeout komutları
    • içeriyordu.

sonsuz kullanılarak test edilmiştir ping localhost -4 -t:

@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