こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

バッチファイルでの画像表示の怪

 WinXP-SP3、IE8で、Office2000です。
 画像関係では、Microsoft Photo Editorもインストールしてあります。
 jpgファイルは、「Windows画像とfaxビューアー」に関連付けています。

 ところで、このとき、下記バッチファイルを走らせると、「Microsoft Photo Editor」ではなく「Windows画像とfaxビューアー」で画像が表示されるのです。なぜでしょうか。
 ちなみに、jpgファイルをMicrosoft Photo Editorに関連付けると、上記バッチファイルを走らせた場合、画像はMicrosoft Photo Editorで表示されるんです。

(バッチファイル)
START "C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "○○.jpg"
EXIT

投稿日時 - 2009-07-27 00:57:17

QNo.5158435

困ってます

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

(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 /?
 で説明がみれます。

 これでまずは調べてみましょう。


以上、長文ですいません。

投稿日時 - 2009-07-27 16:05:12

お礼

 ご丁寧な解説ありがとうございました。御蔭様でよく理解できました。

(1)「バッチは基本的に逐次処理が前提」。
(2)よって一気に画像を読み込ませたい場合は、必要なだけ「START」を使う。
(3)「START」の次に「""」が必要。

という基本的なことが分かっていなかったため、自分で堂々巡りしていたようです。
 生半可な知識ほど危ない(有害、役に立たない)ものはありませんなぁ。

 最後に1つ質問させてください。
 Exitの件ですが、これもバッチファイルに、最後にとにかくExitと記述しておけば黒い画面が消えることは昔から知っていましたが、仰せの「exitコマンドはそちらにしか効いていません。」とはどういう意味でしょうか。
 おそらく「そちら」っていうのは「元々のバッチ」を意味しているんですね?でも、元々のバッチの末尾にExitを1つ入れておくだけで、4枚の画像を読み込んだ後、黒い画面はすべて消えましたが・・。つまり4つのSTARTで開いた筈の黒い画面が4つとも消えたのです。

投稿日時 - 2009-07-27 17:07:50

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

ごめんなさい、間違えました。

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

投稿日時 - 2009-07-27 18:48:28

お礼

 いやー、詳細な解説ありがとうございました。
 STARTひとつとっても、難しいもんですねぇ。よくわかりました。

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

投稿日時 - 2009-07-27 22:11:13

ANo.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は使い方によってウィンドウの性質が変わるようなので
 ちょっと注意が必要ですね。

投稿日時 - 2009-07-27 18:45:04

ANo.1

まさかと思いますが、
START

"C:\Program ....."
の間は改行していますよね?


つまり、

START
"C:\Program Files\Common Files\Microsoft Shared\PhotoEd\PHOTOED.EXE" "○○.jpg"
EXIT

となっていますよね?

投稿日時 - 2009-07-27 12:07:12

お礼

 早速のご指導ありがとうございます。

>まさかと思いますが、
そも「まさか」でした。御蔭様でこの件は解決しました。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」の効能がよく分かっていません。

投稿日時 - 2009-07-27 12:30:44

あなたにオススメの質問