treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

意外と奥の深いstartコマンドを学んでみる

単純に何かを起動するコマンドだと思っていたstartコマンドですが、調べてみれば結構奥が深い。
startコマンドについて調べてみたことをご報告です。

以前「バッチファイルからexe起動時、黒画面を起動後すぐに消す - treedown’s Report」で使ったstartコマンドですが、思ったよりオプションが多かったので、改めて学び直してみました。

解説

startコマンドは、ざっくりいうと、現在のコマンドプロンプト画面とば別のウインドウで新しいコマンドプロンプトを開き、指定のプログラムを実行する、という動きをします。

基本の使い方は、startコマンドに続けて実行するファイル名やコマンドを指定して実行するという使い方になります。

書式:
start %OPTION% %Path\%FileNAME%

パスを通してなければフルパス指定で実行するファイルを指定することになります。

指定する実行ファイル(コマンド)がコマンドプロンプト上で動作するコマンドかWindowsGUIアプリか、それ以外のファイルかで動作は変わってきます。(後述<基本の使い方>にて)

詳しくは、コマンドプロンプト画面で、

start /?

と入力してヘルプを表示させることで、いろいろと詳しい使い方を知ることができます。

ここも詳しい。

docs.microsoft.com

基本の使い方

指定した実行ファイル(コマンド)がWindowsのGUIアプリの場合には(当然ですが)コマンドプロンプト画面とは別にそのウインドウが開きます。例えば

start notepad

とメモ帳を起動してみます。すると、


このように、メモ帳が起動してきます。

フォルダを指定すると、指定したフォルダを開いた状態のエクスプローラが起動してきます。例えば

start c:\temp

と実行すると、エクスプローラが起動し、


指定した「c:\temp」が開いた状態のエクスプローラ画面が表示されます。

ちょっとしたTIPSですが、コマンドプロンプト画面で

start .\

と入力すると、カレントディレクトリをエクスプローラで表示することが出来ます。コマンドプロンプト作業が多い人には便利。

コマンドプロンプト画面内で完結するコマンド(例えばpingコマンド)を実行した場合には、


別のコマンドプロンプト画面を開いて、コマンドを実行した後、コマンド実行が完了したら自動的に画面は閉じます。

これ以外のテキストファイルや.docxファイル、.pdfファイルなどをstartコマンドで指定すると、その時点で関連付けされているアプリケーションを使って指定したファイルを開いたウインドウが起動してきます。
例えば、テキストファイルを指定してstartコマンドを実行すると


このように、指定したファイルに関連付けされたメモ帳が指定したファイルを開いた状態で起動してきます。ファイルをダブルクリックしたのと同じ動作をstartコマンドが実行してくれる、という動きになります。

その他のオプション

その他のオプションで気になったのが[/MIN]と[/MAX]オプション。その他はプロセスの優先度とか起動するメモリ領域を変えるようなオプションなので割愛。

[/MIN]が起動したウインドウを最小化した状態で起動、
[/MAX]が起動したウインドウを最大表示した状態で起動、

というオプションになります。

例えば前回、<Paint.netの無人インストールを試してみる - treedown’s Report>でやってみたように、無人インストールだけどサイレントインストールが出来ないインストーラだった場合に、startコマンドの/MINオプションで最小化した状態で起動し、自動終了が出来たら、それはそれで使えそうな気がします。

さっそく、

paint.net_install.exe /skipConfig /auto CHECKFORUPDATES=0

これをstartコマンドで実行してみました。

Paint.netのインストーラを配置して、前回にstartコマンドを加えて、

start /MIN paint.net_install.exe /skipConfig /auto CHECKFORUPDATES=0

と実行、すると、


最初のインストーラの処理は、画面が最小化した状態で起動してきました。
成功?
と、思ったら、


インストーラの二段階目のプロセスの画面はしっかりと表示された状態で起動してきて強いまいます。うーん。別のインストーラ(無人インストール)では最小化されたまま進行したので、どうやらインストーラの作りによってこうなってしまうような気がします。

Paint.netのインストーラは前回<Paint.netの無人インストールを試してみる - treedown’s Report>画面の進行状況を参考にすると、「Paint.net Setup: Installing」という最初の段階でインストールファイルを展開してから、実際のインストールを展開ファイルを使って実行(たぶんインストーラが展開したファイル中のインストール.exeを自分で呼び出して実行していると思う)するので、二段階目の呼び出しはstartコマンドの制御外となることで/MINオプションが効かない状態での起動になるように思います。と、いうことは前回同様、MSIパッケージをいったん作成してみれば、結果は変わってくるのかも?

前回学んだ、

paint.net_install.exe /skipConfig /auto /createMsi CHECKFORUPDATES=0

でいったんmsiファイルを生成します。生成したPaintDotNet_x64.msiを使って、

start /MIN msiexec /i "PaintDotNet_x64.msi" /qn /norestart

これでどうなるか見てみます。


しっかり画面が表示された状態でインストールが起動してきてしまいました。うーん。結局インストールは無人で正常に終了するものの、最小化した状態でインストーラを動作させるという目論見は上手くいかないまま検証を完了しました。
msiexecコマンドが間に入っているからかな、と思ったのですが、

start /MIN PaintDotNet_x64.msi /passive /norestart

直接.msiファイルの指定であっても、動作は同じでしたので、やはりPaint.netのインストーラの動作仕様なんじゃないかという結論に達しました。

まだまだ、使いこなすには調べることがありそうです。