53

我有一个将文本发送到 LED 标志的程序。

prismcom.exe

使用程序发送“Hello”:

prismcom.exe usb Hello

现在,例如,我希望使用一个名为 Temperature 的命令程序。

temperature

假设该程序为您的计算机提供温度。

Your computer is 100 degrees Fahrenheit.

现在,我希望将温度的输出写入 prismcom.exe:

temperature | prismcom.exe usb

这似乎不起作用。

是的,我已经为这个问题寻找了二十多分钟的解决方案。在所有情况下,它们要么是 kludges/hacks,要么是 Windows 命令行之外的解决方案。

我会很感激关于如何将输出从温度传输到 prismcom 的指导。

谢谢!

编辑:Prismcom 有两个论点。第一个永远是“usb”。之后出现的任何内容都将显示在标志上。

4

4 回答 4

34

试试这个。将其复制到批处理文件中 - 例如 send.bat - 然后简单地运行send.bat以将消息从温度程序发送到 prismcom 程序。

temperature.exe > msg.txt
set /p msg= < msg.txt
prismcom.exe usb "%msg%"
于 2013-01-29T02:24:09.817 回答
18

您还可以使用 PowerShell 在 Cmd.exe 命令行中运行完全相同的命令。为简单起见,我会采用这种方法...

C:\>PowerShell -Command "temperature | prismcom.exe usb"

请阅读了解 Windows PowerShell 管道

您也可以C:\>PowerShell在命令行输入,它会立即让您进入PS C:\>模式,您可以直接开始编写 PS。

于 2016-01-14T15:15:59.940 回答
16

这应该有效:

for /F "tokens=*" %i in ('temperature') do prismcom.exe usb %i

如果在批处理文件中运行,则需要使用%%i而不是仅使用%i(在两个地方)。

于 2013-01-29T02:12:38.247 回答
-4

不确定您是否正在编写这些程序,但这是一个简单的示例,说明您将如何进行。

程序1.c

#include <stdio.h>
int main (int argc, char * argv[] ) {
    printf("%s", argv[1]); 
    return 0;
}

rgx.cpp

#include <cstdio>
#include <regex>
#include <iostream>
using namespace std;
int main (int argc, char * argv[] ) {
    char input[200];
    fgets(input,200,stdin);
    string s(input)
    smatch m;
    string reg_exp(argv[1]);
    regex e(reg_exp);
    while (regex_search (s,m,e)) {
      for (auto x:m) cout << x << " ";
      cout << endl;
      s = m.suffix().str();
    }
    return 0;
}

编译两者然后运行program1.exe "this subject has a submarine as a subsequence" | rgx.exe "\b(sub)([^ ]*)"

操作员只需将|program1printf操作的输出从stdout流重定向到stdin流,它就坐在那里等待 rgx.exe 接收。

于 2019-08-02T15:58:20.533 回答