プロが教えるわが家の防犯対策術!

C#で書かれたプログラムをバッチ処理を行いたいのですが,方法があまり良く分かりません.

まずC#で書かれたプログラムを起動すると,
処理したいファイル名を入力するテキストボックススと,
パラメータを入力するテキストボックスが表示されて,
ボタンを押すと処理が始まります.

処理したいファイルが数百あるので,バッチ処理でできないものかと考えているのですが,
どのようにC#のプログラムに引数を渡して処理させればいいのか分かりません.

理想としては,コマンドプロンプトから,各種値が入ったテキストファイルなんかを読み込ませて処理できればよいのですが...

十分伝えきれているのか不安ですが,宜しくお願い致します.

A 回答 (3件)

今後も数百単位の処理を行うのなら、一番楽なのはそのC#で作られたというプログラムに手を加える事です。


1回限りでも同じ事ですが。

難しいだのできるかもだの言われてますが、できるかな?じゃなくやるんです。


UWSCで実行する手順を以下に書きます。
 前提条件
  C#で作られたテキストボックスが左上から数えて
  1番目がファイル名、2番目がパラメータであること
  ボタンが1つしかない又は左上から数えて1番目のボタンが処理を実行するボタンであること
  1ファイルにつき処理そのものが3秒以内で終了すること
  処理したいファイル名が必ず存在すること(エラー処理してません)

1.「// ここから」 以下の行を全てコピーし、メモ帳に貼り付け保存、拡張子をtxtからuwsに変更する
2.「処理したいファイル名,パラメータ」を列記したファイルをargs.txtとして作成し、uwsファイルと同じフォルダに置く
3.C#で作られたプログラムを起動する
4.UWSCを起動して先ほど作成したuwsファイルを読み込み、Alt+F1でマクロ開始
5.C#で作られたプログラムのタイトルバーあたりをクリックしてアクティブにし、Ctrlキーを押す

列記したファイル名で上手くいかない場合はフルパスで列記してみたらいいかもしれません。

// ここから

OPTION LOGFILE = 3
// ログファイル名好きに変えてね
// エラー出た場合はこのログファイルに詳細が書かれます
OPTION LOGPATH = "C:\logudenasi.log"
PUBLIC G_ARGSFILE = "args.txt"
// 処理時間は調整してね(秒)
PUBLIC 処理時間 = 3
PUBLIC G_WID

main()

PROCEDURE main()
DIM bFlag = TRUE

// 任意のウィンドウをアクティブにした状態でCTRLが押されるまで待機
WHILE bFlag
IFB GETKEYSTATE(VK_CTRL) = TRUE THEN
G_WID = GETID(GET_ACTIVE_WIN)
bFlag = FALSE
ENDIF
SLEEP(0.02)
WEND
// パラメータの読み込みとボタン押すやつ
FncReadFileAndExcute(G_ARGSFILE)
FEND


PROCEDURE FncReadFileAndExcute(args)
DIM strFiles[1]// ファイル名格納配列
DIM strParams[1]// パラメータ格納配列
DIM fID// 読み込みファイルID
DIM iRows// 読み込みファイル行数

TRY
fID = FOPEN(args)
iRows = FGET(fID,F_LINECOUNT)

RESIZE(strFiles, iRows)
RESIZE(strParams, iRows)

FOR i = 0 TO iRows
strFiles[i] = FGET(fID,i+1,1)
strParams[i] = FGET(fID,i+1,2)
NEXT

FINALLY
FCLOSE(fID)

ENDTRY
// ボタンキャプションが不明だったので取得
GETITEM(G_WID,ITM_BTN)

FOR i = 0 TO iRows
// 1つ目のテキストボックスにファイル名を
SENDSTR(G_WID,strFiles[i],1,TRUE)

// 2つ目のテキストボックスにパラメータを
SENDSTR(G_WID,strParams[i],2,TRUE)

//ボタンを押す
CLKITEM(G_WID,ALL_ITEM_LIST[0])
SLEEP(処理時間)
NEXT
FEND
    • good
    • 0
この回答へのお礼

ありがとうございます.
アドバイスを参考に,バッチ処理ができるようになりました!

お礼日時:2013/11/09 12:38

うまくやれば、UWSCのような自動化ツールを使ったり、WindowsMessageを使って貼り付けたりで、対応できるかもしれません

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます.
自動化ツールも含めて検討してみます!

お礼日時:2013/11/06 11:11

バッチ処理をするためにはこのプログラムが初めから引数を引っ張れるようなプログラムでなければできません。

開いて、情報を書き込んで、ボタンを押すという作業のリクエストが有る以上は無理でしょう。そのプログラムが貴方が書いて物であるのならその部分を自動読み取りにすることでバッチ処理ができるようになります。でも他の人のプログラムなら難しいですね。

この回答への補足

やはりそうですか,
一応ソースコード(VisualStudioで作ったらしい)はあるのですが,
プログラミング自体あまり得意ではなく,またC#なんて触ったこともないので困っていることろです.

補足日時:2013/11/05 17:22
    • good
    • 0
この回答へのお礼

自動化ツールを使う方法と,頑張ってソースをいじる方法の二つから攻めてみたいと思います.
ご回答ありがとうございました.

お礼日時:2013/11/06 11:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!