如何在Windows中使用批处理命令拆分字符串?

时间:2013-02-09 04:40:39

标签: windows batch-file

我在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这样的命令,但没有运气。如何修改字符串才能工作?

谢谢!

2 个答案:

答案 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)通常不值得这么麻烦。

相关问题