• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バッチファイルでの画像表示の怪)

バッチファイルでの画像表示における問題

このQ&Aのポイント
  • WinXP-SP3、IE8で、Office2000の環境下で、画像の表示方法について疑問があります。
  • バッチファイルを実行した際に、予期しない画像表示の仕組みが起こる問題が発生しています。
  • Microsoft Photo EditorとWindows画像とfaxビューアーとの関連付けによって、画像の表示方法が変化することがあります。

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

  • ベストアンサー
  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.2

(1)DOS画面に勝手に消えてもらうには 下記のいずれかで実現可能です (1-1)方法1  最後に  exit  を入れればOKです。  なお、(3)でも述べますが元々のバッチではstartコマンドで  新規ウィンドウを開いているため、  exitコマンドはそちらにしか効いていません。 (1-2)方法2  最初のstartコマンドを削除します。  (3)でも述べますが、startコマンドは新規に  コマンドプロンプトを開くためのコマンドです。 (2)一挙に連続して読ませるにはどうすれば  これは起動させるプログラムが複数起動に対応している事が  前提となります。  MS Photo Editorは使ったことがないので分かりませんが、  対応しているとして解説します。 (2-1)同時に起動できないわけ  バッチは基本的に逐次処理が前提なので、  あるコマンドが終了しないと次のコマンドに進みません。  例えば、   notepad   calc  という二行のバッチがあった場合、最初にメモ帳が開いて  次に電卓が開きます。  しかし、電卓が開くのはメモ帳を閉じてからになります。  notepadが二行あっても、メモ帳は一つずつしか起動しません。 (2-2)どうすれば同時に出来るか  ここでstartコマンドが使われます。  次のようにしてみると、メモ帳は二つ同時に開きます。   start "" notepad   start "" notepad  (3)で述べますが、startと起動したいプログラムや  コマンドの間にはタイトルが必要となるので  何も指定する必要がなければ""を入れます。  すなわち、Photo Editorの場合は以下のように  するべきなのです。   start "" "C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "○○.jpg"   start "" "C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "△△.jpg" (3)startコマンドとは? なたなぜ上記のようにすれば良いか (3-1) startコマンド簡単な解説  前述の通りバッチは逐次処理なので、前のコマンドが  終了しないと次のコマンドに進みません。  一つのバッチの中ではシングルタスクなのです。    それに対して、  startコマンドは新たにコマンドプロンプトを開き、  指定したコマンドなどをそちらの新しいウィンドウで  実行させるコマンドです。  つまり、指定したコマンドを外部で実行させることにより  元のバッチにおいてはそのコマンドの終了を待たずに  実行することが出来ます。  上記のnotepadの例ですね。  なお、startに何も指定しない場合には  新規にウィンドウ(コマンドプロンプト)を立ち上げるだけです。 (3-2)何故elodmonさんのバッチではダメなのか  もうおわかりかもしれませんが、elodmonさんのバッチでは  ・新規にコマンドプロンプトを立ち上げる   ↓以下、新規で出来たコマンドプロンプトで実効  ・○○.jpgをPhoto Editorで開く  ・△△.jpgをPhoto Editorで開く  ・新規に作成したコマンドプロンプトを閉じる  を逐次実行しているだけになってしまい、  通常のstartが無いバッチと同じ状態になっていたのです。  参考までにstartの簡単な使い方(オプション指定なし)は、   start ["タイトル"] [コマンド]  です。  つまり、elodmonさんの最初のバッチでは、  タイトル:C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE  コマンド:○○.jpg  となっていたため、動きとしては○○.jpgをダブルクリックしたのと同じで  関連づけられたプログラムが起動することとなってしまっていました。  よって、startコマンドと実行したいコマンドの間に "" を入れることで  ブランクのタイトルを指定すれば正常にコマンドC:\Prog~~~\PHOTOED.EXE  が起動できます。 (3-3)複数Photo Editorを開くには  既に上で回答していますが   start "" "C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "○○.jpg"   start "" "C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "△△.jpg"  でOKです。 (4)補足  各種コマンドの使い方が分からなければ、  コマンドプロンプトを開いて   >[コマンド] /?  で、たいていの場合はヘルプが表示されます。  startコマンドも、   >start /?  で説明がみれます。  これでまずは調べてみましょう。 以上、長文ですいません。

noname#128540
質問者

お礼

 ご丁寧な解説ありがとうございました。御蔭様でよく理解できました。 (1)「バッチは基本的に逐次処理が前提」。 (2)よって一気に画像を読み込ませたい場合は、必要なだけ「START」を使う。 (3)「START」の次に「""」が必要。 という基本的なことが分かっていなかったため、自分で堂々巡りしていたようです。  生半可な知識ほど危ない(有害、役に立たない)ものはありませんなぁ。  最後に1つ質問させてください。  Exitの件ですが、これもバッチファイルに、最後にとにかくExitと記述しておけば黒い画面が消えることは昔から知っていましたが、仰せの「exitコマンドはそちらにしか効いていません。」とはどういう意味でしょうか。  おそらく「そちら」っていうのは「元々のバッチ」を意味しているんですね?でも、元々のバッチの末尾にExitを1つ入れておくだけで、4枚の画像を読み込んだ後、黒い画面はすべて消えましたが・・。つまり4つのSTARTで開いた筈の黒い画面が4つとも消えたのです。

その他の回答 (3)

  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.4

ごめんなさい、間違えました。 >内部コマンドの場合は実行後に、外部プログラムの場合は >起動時にウィンドウが消えるようです。 →内部コマンドの場合はウィンドウはそのまま残るみたいです。  よって、外部のプログラムを起動する場合のみ、  何もしなくてもウィンドウが消える(そもそも開かない?)  となります。

noname#128540
質問者

お礼

 いやー、詳細な解説ありがとうございました。  STARTひとつとっても、難しいもんですねぇ。よくわかりました。 (蛇足)私の環境がMS-DOSからWindowsに切り替わったとき(平成10年くらいでしたか)、Windowsは色彩豊かで、マウス1つで高度な処理ができることに感激しながらも、一方で、MS-DOS時代のバッチファイルによる小器用な処理を懐かしく思ったものでした。Windows環境で何故バッチファイルが"流行らないのか"がよく理解できませんでした。  ともあれ、現在、当時の知識が少しは役に立っているのはありがたいことです。

  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.3

ご存じの通り、バッチの最後にexitを書けば終了時にコマンドプロンプトのウィンドウが閉じます。 (コマンドプロンプトで直接書けば、実行時にウィンドウが閉じる) 今回のstartが絡むと、バッチによって動きが違うので解説します。 ・最初のバッチ (startコマンドを独立しておいている場合)  startコマンドがそれだけで存在する場合、  普通にコマンドプロンプトを開いたのと同じ動作をします。  このため、最初のバッチ   START   "C:\Prog~~~\PHOTOED.EXE" "○○.jpg"   "C:\Prog~~~\PHOTOED.EXE" "△△.jpg"   EXIT  ではstartコマンドで開いたウィンドウで二行目、三行目、  四行目を実行して終了します。  つまり、元のコマンドプロンプトのウィンドウの処理は  最初のstartを行った時点で終了しており、  四行目のexitはstartで開いた側の  新しいコマンドプロンプトにかかっています。  このため、最初のバッチでは元のウィンドウが閉じなかったのです。  よって、質問の回答は逆で、[そちら]=[新しいウィンドウ]です。 ・次のバッチ (startコマンドでプログラムを実行する場合)  startコマンドでプログラムを実行する場合は  内部コマンドの場合は実行後に、外部プログラムの場合は  起動時にウィンドウが消えるようです。  このため、下記のように大本のバッチの最後にexitがあれば  全てのウィンドウが消えます。   start "" "C:\Prog~~~\PHOTOED.EXE" "○○.jpg"   start "" "C:\Prog~~~\PHOTOED.EXE" "△△.jpg"   EXIT  startは使い方によってウィンドウの性質が変わるようなので  ちょっと注意が必要ですね。

  • Yorisin
  • ベストアンサー率54% (364/663)
回答No.1

まさかと思いますが、 START と "C:\Program ....." の間は改行していますよね? つまり、 START "C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "○○.jpg" EXIT となっていますよね?

noname#128540
質問者

お礼

 早速のご指導ありがとうございます。 >まさかと思いますが、 そも「まさか」でした。御蔭様でこの件は解決しました。MS-DOS時代にある程度バッチファイルは勉強したのですが、STARTコマンドのことはよく分かりません。  ということで、さらに次の2点をご指導いただければありがたいのですが。 (1)最後に黒っぽいDOS画面に勝手に消えてもらうにはどうすればよいのでしょうか。 (2)2つのjpgファイルを自動的に一挙に連続して読ませるにはどうすればよいのでしょうか。下記のコードでは1個目を開いた状態で止まってしまいます。素人考えで、もう1つSTARTを入れてもダメなんですよねぇ。 START "C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "○○.jpg" "C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "△△.jpg" EXIT ※そもそも「START」の効能がよく分かっていません。

関連するQ&A