バッチファイルを最小化して実行する

バッチファイルを実行したときには、コマンドプロンプトの画面が表示されます。

これを最小化した状態で実行し、画面に表示しないための方法です。

@echo off

if not %0=="%~dp0.%~nx0" (
  start /min "" cmd /c,"%~dp0.%~nx0" %*
  exit
)

rem 必要な記述は以上。以下に実行したいコマンドを記述。

echo Msgbox "最小化して実行されました。",vbInformation,"成功" > %TEMP%tmpMsgbox.vbs
%TEMP%tmpMsgbox.vbs
del %TEMP%tmpMsgbox.vbs

rem 以下の行は例としてメッセージを表示させています。

最初に実行したとき if の条件に入り、自身のファイルを最小化で実行しなおすということをしています。
実行しなおされたときは if に入らず、rem 以下のコマンドを実行します。

%0 の記述

%0 は “実行したバッチファイルの絶対パス” です。ダブルクォーテーションで括られています。
以下がそのオプションです。

  • ~ … ダブルクォーテーションを除く。
  • d … 「ドライブ文字:」のみ。
  • p … ドライブ文字とファイル名、拡張子を除いた部分。ドライブ文字の無いフォルダパス。
  • n … ファイル名のみ。拡張子なし。
  • x … 「.拡張子」のみ。

オプションを使用するときは、「~」に続けて記述しましょう。
dp と nx はほとんどの場合、セットにして使用すると思います。

  • フォルダパス … “%~dp0”
  • ファイル名+拡張子 … “%~nx0”

パスに空白が含まれる場合のことを考慮し、ダブルクォーテーションで囲んでいます。

当たり前ですが
%0==”%~0″
です。記述はどちらでも動きます。

オプションを詳しく知りたい場合はコマンドプロンプトで call /? と入力すると出てきます。

start コマンド

start /min “タイトル” 実行ファイル
とすることで、ファイルを最小化して実行できます。

実行ファイルとして cmd 、つまりコマンドプロンプトを起動しています。
/c はコマンドプロンプトを自動で終了させるオプション。
“タイトル” の部分は最小化起動したコマンドプロンプトのタイトルで、上記の例では無しにしています。

“%~dp0.%~nx0″ は、”フォルダパス.ファイル名.bat” のことです。
要は実行しているファイルと同じものを指しているのですが、if 条件で分岐するために「.」を挟んだ記述になっています。

%* は引数を引き継ぐおまじない。

if の条件分岐

start 内で実行されたバッチファイルのパスは、同フォルダ内を指す「.」という記述を挟んでいます。
同じファイルを指していながら、最初に実行したときのパスとは異なる文字列になっているのです。

つまり、1回目は最小化せずに起動し、いわゆる「普通の絶対パス」で実行していますから if の条件内に入り、start コマンドを実行したあとに exit で即終了しています。
その start 内で最小化実行された “フォルダパス”.”ファイル名.bat” は if の条件に入らず、rem 以下のコマンドを実行しているのです。

結論

考え方が少しややこしい!けど記述は4行。
必要なときはコピペ。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

4 + 16 =