• 締切済み

バッチファイル

今画像処理のプログラムを作成しています. そのプログラムで,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 //---------------------------------------------------------// しかし,両方とも,同じ名前の画像を取得してしまいます. 違う画像を取得するにはどのようにプログラムを書いたら よいのでしょうか.アドバイスよろしくお願いします.

みんなの回答

  • kent85
  • ベストアンサー率52% (38/73)
回答No.6

BATとC側の両方ともだと進まないですよ。 ・BATファイルのダブルクリック起動をやめて  DOS窓を開いて、コマンドライン上で BATファイルをタイプして起動する。  ( 結果が見えるため ) ・BATファイルをECHO表示させて確かめる ECHO ON ・BATファイルで for も 変数も使わずにプログラム起動を固定のべた記述する  ( Cのアプリが動くまでは、コマンドラインから起動する場合と全く同じにする ) ・bmp / BAT / Cのアプリは、同じディレクトリに置く ・Cのアプリが動くまでデバッグ  最初は先頭に printf() / MessageBox() で argv[1],argv[2] を表示させるといいかも… ・Cのアプリが動いたら、BATファイルの方を修正する

参考URL:
http://www.ne.jp/asahi/hishidama/home/tech/windows/bat.html
razio915
質問者

お礼

ご回答ありがとうございます

  • Werner
  • ベストアンサー率53% (395/735)
回答No.5

> @echo off > set COMAND=卒業研究プログラム.exe > echo on > for %%A in (%*.raw%) do %COMMAND% %%A.raw %A_s.raw ・COMANDにセットしているのに、読んでいるのは%COMMAND% ・環境変数でもない*.rawを%で囲んでいる ・%A_s.rawの%の数が足りない

razio915
質問者

お礼

バッチファイルの知識がなく、あまりわかっていませんので、 おかしな書き方をしてしまっているかもしれません

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.4

>> strcpy(Img.FileNameIn1,argv[1]); >> strcpy(Img.FileNameIn2,argv[2]); > >上記のように書き直しました.しかし、うまくいきませんでした. うまくいかない状況は?

razio915
質問者

補足

バッチファイルをダブルクリックしても、処理が実行されずに, すぐに終了してしまいます

  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

環境変数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なのが気になる。

razio915
質問者

補足

@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)
回答No.2

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]」にアクセスしている。 に掛かっていると思います

razio915
質問者

補足

@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も変えないといけないのですよね?

noname#77845
noname#77845
回答No.1

気がついたところ。 1 ファイルにアクセスするときに、どちらも「argv[1]」にアクセスしている。(当然同じファイル。) 2 バッチファイルの中で「PATH」(最初は「*.bmp」)を上書き(「*_s.bmp」へ)している。(上書きしているので、「PATH」は「*_s.bmp」) 3 ファイル名が「aaa.bmp」と「aaa_s.bmp」を「*.bmp」なら両方取得してしまう。(今の場合は関係ないか…。) 因みに、環境変数「PATH」は変更しない方が良いと思いますよ。

razio915
質問者

お礼

ありがとうございます. このプログラムをどのように変えていけばよいのでしょうか?