へっぽこへたれシステム管理者の管理人です。
さて、職場のパソコンに設定を流し込むときなどに、
ログオンスクリプトでバッチファイルを流すのですが、
途中で「×」を押して止めてしまう方が少なからずおられます。
このため、ログオンスクリプトのコマンド画面を表示させない方法を
アレコレググっているとやり方が分かりましたので忘備録として掲載しておきます。
テストするバッチファイルを作成
まずは、テストするバッチファイルを作成します。
@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で最初バッチファイルを起動すれば黒いコマンドラインの画面が表示されずに実行することができます。
コメント