- 締切済み
バッチファイル
今画像処理のプログラムを作成しています. そのプログラムで,2つの入力画像データを読み込みたいのですが, うまくいきません. 下記のようにプログラムしています. //---------------------- C言語のソース -----------------------// strcpy(Img.FileNameIn1,argv[1]); //InputData1のファイル名の取得 MakeFileName(&Img,"ou1.bmp"); //出力ファイル名の作成 Readbmp(&Img); //InputData1のデータの読み込み strcpy(Img.FileNameIn2,argv[1]); //InputData2のファイル名の取得 MakeFileName(&Img,"out2.bmp"); //出力ファイル名の作成 ReadRaw(&Img); //InputData2のデータの読み込み //------------------------------------------------------------// //------- バッチファイルではこのように書いています ------// @echo off set COMAND = program.exe set PATH = * .bmp set PATH = *_s.bmp echo on for %%A in (%PATH%) do %COMAND% %%A //---------------------------------------------------------// しかし,両方とも,同じ名前の画像を取得してしまいます. 違う画像を取得するにはどのようにプログラムを書いたら よいのでしょうか.アドバイスよろしくお願いします.
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- kent85
- ベストアンサー率52% (38/73)
BATとC側の両方ともだと進まないですよ。 ・BATファイルのダブルクリック起動をやめて DOS窓を開いて、コマンドライン上で BATファイルをタイプして起動する。 ( 結果が見えるため ) ・BATファイルをECHO表示させて確かめる ECHO ON ・BATファイルで for も 変数も使わずにプログラム起動を固定のべた記述する ( Cのアプリが動くまでは、コマンドラインから起動する場合と全く同じにする ) ・bmp / BAT / Cのアプリは、同じディレクトリに置く ・Cのアプリが動くまでデバッグ 最初は先頭に printf() / MessageBox() で argv[1],argv[2] を表示させるといいかも… ・Cのアプリが動いたら、BATファイルの方を修正する
- Werner
- ベストアンサー率53% (395/735)
> @echo off > set COMAND=卒業研究プログラム.exe > echo on > for %%A in (%*.raw%) do %COMMAND% %%A.raw %A_s.raw ・COMANDにセットしているのに、読んでいるのは%COMMAND% ・環境変数でもない*.rawを%で囲んでいる ・%A_s.rawの%の数が足りない
お礼
バッチファイルの知識がなく、あまりわかっていませんので、 おかしな書き方をしてしまっているかもしれません
- asuncion
- ベストアンサー率33% (2127/6289)
>> strcpy(Img.FileNameIn1,argv[1]); >> strcpy(Img.FileNameIn2,argv[2]); > >上記のように書き直しました.しかし、うまくいきませんでした. うまくいかない状況は?
補足
バッチファイルをダブルクリックしても、処理が実行されずに, すぐに終了してしまいます
- Werner
- ベストアンサー率53% (395/735)
環境変数PATHは特別な意味を持つので 一時変数として使わない方がよいです。 > @echo off > set COMAND=program.exe > echo on > for %%A in (%PATH%) do %COMAND% %%A.bmp %%A_s.bmp %PATH%のところを適切に書き換えないとだめでしょう。(たとえば*.bmpとか) > strcpy(Img.FileNameIn1,argv[1]); > strcpy(Img.FileNameIn2,argv[1]); > ここのargvも変えないといけないのですよね? 当然。 あとは、COMMANDじゃなくてCOMANDなのが気になる。
補足
@echo off set COMAND=卒業研究プログラム.exe echo on for %%A in (%*.raw%) do %COMMAND% %%A.raw %A_s.raw > strcpy(Img.FileNameIn1,argv[1]); > strcpy(Img.FileNameIn2,argv[2]); 上記のように書き直しました.しかし、うまくいきませんでした.
- Cupper
- ベストアンサー率32% (2123/6444)
C言語で書いたプログラムの方は良く分かりませんが、バッチファイルは @echo off > nul set COMAND = program.exe echo on %COMAND% %%A.bmp %%A_s.bmp または program.exe %%A.bmp %%A_s.bmp ではダメですか edomin2004さんが回答しているように質問の例では PATHを上書きしているので、 *_s.bmp だけが PATHになっています また、プログラムに対してパラメータを与えるときはプログラムを2回起動するのではなく PROGRAM <PARAMETER1> <PARAMETER2> として与えるのが普通です 質問にあるバッチファイルの例では program.exe %%A.bmp program.exe %%A_s.bmp として2回起動しようとしています (幸い PATHが *_s.bmpだけなので1回しか起動されていない) これが edomin2004さんの仰る >どちらも「argv[1]」にアクセスしている。 に掛かっていると思います
補足
@echo off set COMAND=program.exe echo on for %%A in (%PATH%) do %COMAND% %%A.bmp %%A_s.bmp としてもダメでした. strcpy(Img.FileNameIn1,argv[1]); strcpy(Img.FileNameIn2,argv[1]); ここのargvも変えないといけないのですよね?
気がついたところ。 1 ファイルにアクセスするときに、どちらも「argv[1]」にアクセスしている。(当然同じファイル。) 2 バッチファイルの中で「PATH」(最初は「*.bmp」)を上書き(「*_s.bmp」へ)している。(上書きしているので、「PATH」は「*_s.bmp」) 3 ファイル名が「aaa.bmp」と「aaa_s.bmp」を「*.bmp」なら両方取得してしまう。(今の場合は関係ないか…。) 因みに、環境変数「PATH」は変更しない方が良いと思いますよ。
お礼
ありがとうございます. このプログラムをどのように変えていけばよいのでしょうか?
お礼
ご回答ありがとうございます