0

Windows コンピューターで LED サインをセットアップしており、Linux コンピューターの温度を表示させようとしています。

acpitz-仮想-0

アダプター: 仮想デバイス

temp1: +97.7°F (クリティカル = +183.2°F)

さて、これが私のコンピューター上のバッチファイルです

wget 192.168.1.58/sensor1.txt

フォルダーに wget の Windows バージョンがあります。

type sensor1.txt | findstr /v acpitz-virtual-0 | findstr /v Adapter: > msg.txt
set /p msg= < msg.txt

prismcom.exe usb {HOLD} %msg%

今、私のサインは同等のものを点滅させます

temp1: +97.7°F (クリティカル = +183.2°F)

点滅する必要があります

+97.7°F、

またはさらに良い、

+97.7 F

FIND や FOR などのコマンドを試してみましたが、うまくいきませんでした。文字列を変更して機能させるにはどうすればよいですか?

ありがとう!

4

2 に答える 2

4

温度が格納されている変数が「temp」と呼ばれ、「temp1: +97.7°F (crit = +183.2°F)」の値を持つとします。この小さなスニペットは驚異的に機能するはずです...

setlocal enabledelayedexpansion
set dis=!temp:~7,5! F
set check=!temp:~10,1!
if %check% neq . set dis=!temp:~7,6! F

構文は次のとおりです。

set variable=!variable_to_be_constrained:~offset,amount_of_characters!

言及しておくべきことの 1 つは、変数 "TEMP" (または "temp"、一般に .bat ファイルでは大文字と小文字はあまり関係ありません) は事前定義されたコマンド ライン変数であり、通常、それらは決して上書きされるべきではないということです。ただし、この場合は純粋に審美的な目的のためであり、必要に応じて変更できます。

--編集-- 華氏 100 度を超える温度に対応するために 2 行を追加しました。tempにも変更dis

于 2013-02-09T05:57:09.210 に答える
0

Windows バージョンの wget を使用している場合は、温度を解析するための特別なコマンドも使用できます。C では、やりたいことを簡単に行うことができます。

#include <stdio.h>

int main(void) {
    char buf[1000];
    scanf("temp1: %[+0-9.]", buf);
    printf("%sF", buf);
    return 0;
}

これを任意の C コンパイラでコンパイルします。MinGW (コンパイルされたコードは追加の DLL を必要としないため推奨) またはCygwin (追加の DLL が必要)から無料のものを入手します。Microsoft Visual Studio Expressを試すこともできますが、より手間がかかります。

上記のコードが にある場合、filter.cMinGW または Cygwin のコマンドは次のようになります。

gcc filter.c -o filter

filter.exeこれにより、パイプラインで使用できるというファイルが生成されます。

type sensor1.txt | findstr /v acpitz-virtual-0 | findstr /v Adapter: | filter > msg.txt

教訓は、制限されたツール ( などcmd.exe) は、多くの場合、手間をかける価値がないということです。

于 2013-02-09T05:04:48.517 に答える