0

我在 Windows 计算机上设置了一个 LED 标志,并试图让它显示我的 Linux 计算机的温度:

acpitz-虚拟-0

适配器:虚拟设备

temp1:+97.7°F(临界 = +183.2°F)

现在,这是我电脑上的批处理文件

wget 192.168.1.58/sensor1.txt

我在文件夹中有一个 Windows 版本的 wget。

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 华氏度

我一直在尝试使用 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!

我应该提到的一件事是变量“TEMP”(或“temp”,大小写通常与 .bat 文件无关紧要)是预定义的命令行变量,通常不应该覆盖这些变量。但是,在这种情况下,它纯粹是出于审美目的,您可以将其更改为您想要的任何内容。

--EDIT-- 添加了两行以允许超过 100 华氏度的温度。也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.c,那么 MinGW 或 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 回答