バッチファイルをバックグラウンドで動かす方法

スポンサーリンク
050-VBA

へっぽこへたれシステム管理者の管理人です。

さて、職場のパソコンに設定を流し込むときなどに、

ログオンスクリプトでバッチファイルを流すのですが、

途中で「×」を押して止めてしまう方が少なからずおられます。

このため、ログオンスクリプトのコマンド画面を表示させない方法を

アレコレググっているとやり方が分かりましたので忘備録として掲載しておきます。

テストするバッチファイルを作成

まずは、テストするバッチファイルを作成します。


@echo off
 
rem メッセージ表示
echo MsgBox "メッセージを表示します。",vbInformation,"情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs
 
rem ファイル削除
del /Q %TEMP%\msgbox.vbs


pause

上のバッチファイルは、ダイアログボックス【メッセージボックス】を表示させるものです。

Windowsのテンポラリーフォルダに【拡張子:vbs】ファイルを強制的に作成して、

それを実行し、

最後に作成した【拡張子:vbs】ファイルを削除します。

この方法はネットで調べましたが、

バッチファイルでvbsファイルを強制的に作成して、

実行する方法があるとは・・・

目から鱗です。

普通に実行すれば、上の画像の様にコマンドラインの黒い画面が表示されます。

さて、この黒い画面を表示させずに・・・

バッチファイルをバックグラウンドで動かす方法ですが・・・

調べた限りでは2つの方法がありました。

スポンサーリンク

方法その1

方法その1ですが・・・

バッチファイル内に黒い画面を最小化するコマンドを仕込む方法です。


@echo off

rem 追加する行ここから
@if not "%~0"=="%~dp0.\%~nx0" start /min cmd /c,"%~dp0.\%~nx0" %* & goto :eof
rem 追加する行ここまで

 
rem メッセージ表示
echo MsgBox "メッセージを表示します。",vbInformation,"情報" > %TEMP%\msgbox.vbs & %TEMP%\msgbox.vbs
 
rem ファイル削除
del /Q %TEMP%\msgbox.vbs


pause
スポンサーリンク

この呪文を1行たすと、黒い画面が表示されなくなります。

各部分の意味は次のとおりです。

@

  • バッチファイル内でコマンドを実行しても表示しない
  • @を先頭につけることで、その行だけエコーを無効にする。

ブログランキングにご協力ください!
ブログランキング・にほんブログ村へ

if not "%~0"=="%~dp0.\%~nx0"

  • 条件式
  • %~0 → バッチファイル自身のフルパスとファイル名(バッチファイルの実行パス)
  • %~dp0 → バッチファイルのあるフォルダのパス(ドライブとパス部分)
  • %~nx0 → バッチファイルの名前(ファイル名と拡張子)
  • "%~dp0.\%~nx0" → フォルダのパス+ファイル名(現在のディレクトリを明示)
  • この条件は「現在実行中のファイルパス(%~0)が、自分自身(%~dp0.\%~nx0)と一致しない場合」を判定

start /min cmd /c,"%~dp0.\%~nx0" %*

  • バッチファイルを新しいコンソールで最小化状態で再起動する部分です
  • start /min → 新しいウィンドウを最小化状態で開きます
  • cmd /c → 指定したコマンドを実行後、終了します
  • "%~dp0.\%~nx0" → 自分自身のフルパスを指定しています
  • %* → 元のバッチファイルに渡されたすべての引数を再度渡す

& goto :eof

  • コマンドを実行した後、バッチファイルの終了に移動
  • :eof → はバッチファイルの「ファイル末尾」を意味する

このコマンドの目的

  • バッチファイルが「実行されている環境」と「自分自身のパス」が一致していない場合に、自分自身を最小化した新しいコンソールで再実行
  • 二重起動や不適切な実行環境での誤動作を防ぐ

方法その2

vbsからバッチファイルを起動する。

次のvbsを作ります。

Set ws = CreateObject("Wscript.Shell")
ws.run "cmd /c バッチファイルのフルパス", vbhide

各部分の意味は次のとおりです。

Set ws = CreateObject("Wscript.Shell")

  • CreateObject("Wscript.Shell") → Windows Script Host(WSH)の Wscript.Shell オブジェクトを作成
  • Set ws = → 作成したオブジェクトを変数 ws に代入

ws.run "cmd /c バッチファイルのフルパス", vbhide

  • ws.run → 指定したプログラムやコマンドを実行する
  • "cmd /c バッチファイルのフルパス" → コマンドプロンプトで cmd /c を使ってバッチファイルを実行
  • vbhide → 実行時のウィンドウ状態を指定

このvbsで最初バッチファイルを起動すれば黒いコマンドラインの画面が表示されずに実行することができます。

ブログ開設に必要なドメイン取得、サーバーレンタル、ASPの登録等は、こちらのサイトから!

コメント

タイトルとURLをコピーしました