プログラミング言語や環境設定を中心としたパソコン関連の技術メモです。
主にシステム開発中に調べたことをメモしています。TIPS的な位置付けで、気が向いたときにちまちま更新していきます。
Windows、バッチファイル(.bat)を最小化した状態で起動する
結論から書きますね。
理屈としては

start /MIN ほげほげ

でコマンドプロンプトのウインドウを最小化した状態で起動できるので
「バッチファイルを最小化した状態で起動するバッチファイル」を別に用意すればOKです。
更に「バッチファイルを最小化した状態で起動するバッチファイル」を自バッチファイルに組み込んで
自バッチファイルを再帰的に呼び出すようにすれば、1つのバッチファイルでも実現可能です。

それでは順番に見ていきましょう。

まずはバッチファイルを2つ使うバージョンですが、例えばこんなんφ(--)

■C:\test.bat
@echo off

start /MIN %~dp0test2.bat %*

■C:\test2.bat
@echo off

echo "test"
echo %*

pause
exit

「test.bat」から同じフォルダにある「test2.bat」を最小化した状態で起動しています。
「%~dp0」はtest.batのパスで「%*」はtest.batに渡されたパラメータ全部ね。
最小化して起動したいってことはバッチファイルを直接ダブルクリックで起動するつもりだと思うので
パラメータの受け取りはいらない気もしますが、一応付けておきました。

バッチファイルを2つも作りたくない人は自分を再帰的に呼び出しましょう、らしいです。
例えばこんなコードにしろですってさφ(--)

■C:\test3.bat
@echo off

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


echo "test"
echo %*

pause

まず最初に起動されるのが「C:\test3.bat」ですが、
その中で「C:\.\test3.bat」を最小化して起動する、と。
自分のパスが「C:\.\test3.bat」のときは子画面だからスルーする、ってな理屈のようです。
つまり、こーゆーことですねφ(--)

if not "%~0"=="C:\.\test3.bat" (
    start /min cmd /c,"C:\.\test3.bat" %*
    exit
)

なるほど(--)

個人的にはパスを書き換えて判定ってのが好みでは無かったので、
環境変数を使うように変更してみましたφ(--)

■C:\test4.bat
@echo off

if not "%HOGE%"=="hoge" (
    set HOGE=hoge
    start /min cmd /c,"%~0" %*
    exit
)

echo "test"
echo %*

pause

一発目の呼び出し時に適当な環境変数(例では「HOGE」)に適当な値(例では「hoge」)を入れて
値が未設定であれば一発目、設定済みであれば再帰的に呼び出されたものと判断しています。
細かい理屈は省略しますが、親バッチの環境変数が子バッチに受け渡される性質を利用していますよ。
個人的にはこっちの方が好みです。

と言うわけで、バッチファイルを最小化した状態で起動するの、完了\(--)/
スポンサーリンク
 
このエントリーをはてなブックマークに追加 

category:コマンド/バッチ  thema:システム開発 - genre:コンピュータ  Posted by ササキマコト 

  関連記事