web-dev-qa-db-ja.com

パイプを使用して、あるコマンドの出力を別のコマンドの入力にリダイレクトするにはどうすればよいですか?

LEDサインにテキストを送信するプログラムがあります。

prismcom.exe

プログラムを使用して「Hello」を送信するには:

prismcom.exe usb Hello

ここで、たとえば、Temperatureというコマンドプログラムを使用したいと思います。

temperature

プログラムがコンピューターの温度を与えるとしましょう。

Your computer is 100 degrees Fahrenheit.

次に、温度の出力をprismcom.exeに書き込みたいと思います。

temperature | prismcom.exe usb

これは機能しないようです。

はい、私はこれに対する解決策を20分以上探してきました。いずれの場合でも、それらはWindowsコマンドライン以外の問題/ハックまたはソリューションのいずれかです。

出力を温度からprismcomにパイプする方法についての指示をいただければ幸いです。

ありがとう!

編集:Prismcomには2つの引数があります。最初は常に「usb」です。その後に来るものはすべてサインに表示されます。

31
Austin Burk

これを試して。これをバッチファイル(send.batなど)にコピーし、send.batメッセージを温度プログラムからprismcomプログラムに送信します。

temperature.exe > msg.txt
set /p msg= < msg.txt
prismcom.exe usb "%msg%"
23
Kenny Kerr

これは動作するはずです:

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

バッチファイルで実行する場合は、(両方の場所で)%%iだけでなく%iを使用する必要があります。

12
Harry Johnston

PowerShellを使用して、Cmd.exeコマンドラインでまったく同じコマンドを実行することもできます。シンプルにするためにこのアプローチを使用します...

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

Windows PowerShellパイプラインについて を読んでください。

また、コマンドラインでC:\>PowerShellと入力すると、PS C:\>モードになり、PSの書き込みを直接開始できます。

10
Ostati

これらのプログラムをコーディングしているかどうかはわかりませんが、これはどのようにコーディングするかを示す簡単な例です。

program1.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)([^ ]*)"を実行します

_|_演算子は、program1のprintf操作の出力をstdoutストリームからstdinストリームにリダイレクトするだけで、そこに座ってrgx.exeが取得するのを待っています。

0
annoying_squid