[Windows] バッチファイル(.bat)を非表示・最小化した状態で起動する



バッチファイルを実行すると、コマンドプロンプトの黒い画面が表示されます。

タスクスケジューラなどで自動実行している場合、コマンドプロンプトのウインドウが最前面に出てくるため他の作業の邪魔になります。

これには幾つかの回避策が考えられます。

スポンサードリンク

VBSを使ってコマンドプロンプトを制御する

VBS(VBScript)というスクリプト言語を使えば、コマンドプロンプト画面に表示せずに実行が可能です。

次のように書くことができます。

Set objWShell = CreateObject(“Wscript.Shell”) 
objWShell.run “cmd /c バッチファイル.bat“, vbHide 

作成できたら、今までバッチファイルを直接起動していたのを、VBSを呼び出すようにするだけで動作します。

因みに、もっと細かく設定した場合は次を参考にしてください。

Option Explicit

Const vbHide = 0             'ウィンドウを非表示
Const vbNormalFocus = 1      '通常のウィンドウ、かつ最前面のウィンドウ
Const vbMinimizedFocus = 2   '最小化、かつ最前面のウィンドウ
Const vbMaximizedFocus = 3   '最大化、かつ最前面のウィンドウ
Const vbNormalNoFocus = 4    '通常のウィンドウ、ただし、最前面にはならない
Const vbMinimizedNoFocus = 6 '最小化、ただし、最前面にはならない

Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run "cmd /c バッチファイル.bat", vbMinimizedNoFocus, False

Set objWShell = Nothing

バッチファイル(.bat)を最小化した状態で起動する

ffmpegなどのツールを使って複数ファイルを変換する場合は、ツールがコマンドプロンプトを表示するため、上記の方法では対処できない場合があります。

その場合は、コマンドプロンプトは表示されますがウインドウを最小化状態で起動することで回避します。

つまり、次のように「バッチファイルを最小化した状態で起動するバッチファイル」を別に用意します。

@echo off

start /min %~dp0バッチファイル2.bat %*

この例では、「バッチファイル.bat」から同じフォルダにある「バッチファイル2.bat」を最小化した状態で起動しています。

startコマンドで「/min」オプションを指定すると、起動するコマンドプロンプトウィンドウやアプリケーションのウィンドウが最小化の状態で起動します。

「%~dp0」 は、「実行されているファイルが置かれているカレントディレクトリ」です。

次に、呼び出される側のバッチファイルの例です。このバッチファイルでは、具体的に実行したいコマンドを呼び出すことになります。

@echo off

echo "test"
echo %*

pause
exit

ここで「%*」は「バッチファイル.bat」に渡されたパラメータを意味します。

1つのバッチファイルで実現する方法

上記の方法を応用して、自分自身を再帰的に呼び出すようにすれば、1つのバッチファイルでも実現可能です。

@echo off

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

start 実行ファイル

最初に起動されるのが「バッチファイル3.bat」です。その中で「バッチファイル3.bat」を最小化して起動しています。

ただし、自分のパスが「バッチファイル3.bat」のときは子画面のため無視されます。

この方法を使えば、最小化されてデスクトップ上には表示されない状態で実行ファイルを呼び出す事ができます。

スポンサードリンク