バッチファイルを実行したときには、コマンドプロンプトの画面が表示されます。
これを最小化した状態で実行し、画面に表示しないための方法です。
@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行。
必要なときはコピペ。