- ベストアンサー
C#でバッチ処理を行う方法について
- C#で書かれたプログラムをバッチ処理する方法についてわかりません。プログラムを起動する際に、ファイル名とパラメータを入力するテキストボックスが表示され、処理が始まるという仕組みです。数百のファイルをバッチ処理したいので、C#のプログラムに引数を渡す方法が知りたいです。
- C#でバッチ処理するためのプログラムに引数を渡す方法がわかりません。プログラムを起動すると、ファイル名とパラメータを入力するテキストボックスが表示され、ボタンを押すと処理が始まります。数百のファイルをバッチ処理したいので、効率的な方法を知りたいです。
- C#で書かれたプログラムをバッチ処理する方法を教えてください。プログラムを起動すると、処理したいファイル名とパラメータを入力するテキストボックスが表示され、処理が開始されます。数百のファイルを処理するために、C#のプログラムに引数を渡す方法を知りたいです。
- みんなの回答 (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
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
うまくやれば、UWSCのような自動化ツールを使ったり、WindowsMessageを使って貼り付けたりで、対応できるかもしれません
お礼
ご回答ありがとうございます. 自動化ツールも含めて検討してみます!
- Shlalbubu
- ベストアンサー率72% (31/43)
バッチ処理をするためにはこのプログラムが初めから引数を引っ張れるようなプログラムでなければできません。開いて、情報を書き込んで、ボタンを押すという作業のリクエストが有る以上は無理でしょう。そのプログラムが貴方が書いて物であるのならその部分を自動読み取りにすることでバッチ処理ができるようになります。でも他の人のプログラムなら難しいですね。
お礼
自動化ツールを使う方法と,頑張ってソースをいじる方法の二つから攻めてみたいと思います. ご回答ありがとうございました.
補足
やはりそうですか, 一応ソースコード(VisualStudioで作ったらしい)はあるのですが, プログラミング自体あまり得意ではなく,またC#なんて触ったこともないので困っていることろです.
お礼
ありがとうございます. アドバイスを参考に,バッチ処理ができるようになりました!