こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VC++での外部ファイル(batファイル)の実行

VC++のコード上で.batファイルを実行する必要が出てきたのですが、
VC++で外部ファイルを実行、その結果を受け取るにはどうすればよいのでしょうか?

ちなみに使用しようと思っているバッチファイルは、juliusという音声認識エンジンです。
1.go.batからjulius.exeが起動
2.「### read waveform input enter filename->」と言う記述が出てくるので、wavファイルのファイル名を指定してエンター
3.#sentence1: ついに 、 他 団体 戦 。
#wseq1: <s> ついに:ツイニ:ついに:503 、:、:、:10 他:タ:他:188 団体:ダンタイ:団体:
#507 戦:セン:戦:520 。:。:。:8 </s>
#phseq1: silB | ts u i n i | sp | t a | d a N t a i | s e N | sp | silE
のようにcmd.exe上に結果が返ってくる。

この一連の動作を、1のファイル名をVC++上で指定し、
3のcmd.exe上で現れる分をVC++上で受け取る(CStringなりに格納する)ような方法は無いでしょうか。

もし他に良い方法をご存知の方がいましたら、教えていただければ幸いです。

投稿日時 - 2008-07-20 08:56:49

QNo.4190215

困ってます

質問者が選んだベストアンサー

<%1 は go.batの引数1を入力とする … キーボードからの入力をリダイレクトする

2>&1は エラー出力を標準出力にリダイレクトする

>%2 は 標準出力go.batの引数2にリダイレクトする
といった意味です

> go.bat ファイル名 出力ログファイル名
このファイル名は 解析(juliusで)処理するファイルの名前です
出力ログファイル名は C/C++側で結果を受け取るためのファイル名です

"go.bat ファイル名 出力ログファイル名"
を sawn/execなどにコマンドやパラメータとして渡してやることになります

投稿日時 - 2008-07-22 08:32:36

お礼

希望通りに動作させることが出来ました。
ありがとうございました。

投稿日時 - 2008-07-24 08:21:02

このQ&Aは役に立ちましたか?

74人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.2

パイプ作って子プロセスを起動すればよいですね.

ちょっと古いけど,このあたり参考になるんじゃないかな?
http://www.h4.dion.ne.jp/~fht/wptips/readprc.html

投稿日時 - 2008-07-20 09:36:11

お礼

ANo.3の方の方法で出来ましたが、とても参考になりました。
ありがとうございます。

投稿日時 - 2008-07-24 08:20:01

ANo.1

まずは機能するバッチファイルを記述しましょう

go.batを
@echo off
julius.exe <%1 2>&1 >%2
といったといった具合にして

go.bat ファイル名 出力ログファイル名
で実行して出来上がる出力ログが適切なのかどうか確認しましょう

出来上がった出力ログが満足いくものであれば後はテキストファイルの処理になります

go.batの実行に関してはプログラミングスタイルに依存するともいます
Cランタイムのspawn/exec系やWinAPIのCreateProcessなど使うことになりそうです

投稿日時 - 2008-07-20 09:18:13

補足

ありがとうございます、バッチファイルのログをとるということに頭が回りませんでした。

何でもかんでも聞いてしまって申し訳ないのですが、
<%1 2>&1 >%2の意味と、
go.bat ファイル名 出力ログファイル名 を記述するのはVCのコード上でなのでしょうか?
また、ファイル名とは何のファイル名ですか?

投稿日時 - 2008-07-21 06:54:51

あなたにオススメの質問