我在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 F
我一直在尝试使用FIND和FOR这样的命令,但没有运气。如何修改字符串才能工作?
谢谢!
答案 0 :(得分:4)
假设温度存储的变量称为“temp”,其值为“temp1:+ 97.7°F(暴击= + 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
。
答案 1 :(得分: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
)通常不值得这么麻烦。