バッチファイル(.bat)の実行が完了したら、実行したバッチファイルを表示しているフォルダ(エクスプローラー)を閉じたいと思い色々と試しましたが、バッチファイル単体でフォルダを閉じることができず、実行中にVBS(.vbs)を作成して実行、その後VBSを削除する、という力技で解決したのでその方法をご紹介。

他にも方法はあるみたいなので、いい方法があれば教えてほしい…

非推奨(?)

VBS(VBScript)は2023年10月に非推奨となったらしい…

Microsoftは、英語版「Microsoft Learn」において、2023年10月付けでVBScriptをWindowsの非推奨機能にしたことをアナウンスした。

英語版「Microsoft Learn」内の「Deprecated features for Windows client」(Windowsクライアントの非推奨の機能)ページのリストに、「VBScript」が追加されている。

VBScriptがWindowsの非推奨機能に – 当面はオンデマンドで利用可能 | マイナビニュース

VBS

以下のスクリプトが記載されたVBSを作成したい。

Option Explicit

Dim objWord : Set objWord = CreateObject("Word.Application")
Dim colTasks : Set colTasks = objWord.Tasks
Dim FolderName : FolderName = "実行フォルダ名"

If colTasks.Exists(FolderName) Then colTasks(FolderName).Close

objWord.Quit
Set objWord = Nothing:Set colTasks = Nothing

バッチ

ということで、バッチファイル(.bat)の内容は以下です。

:: -- 実行フォルダの情報を取得 -----
set ThisPath=%~dp0
for %%1 in ("%ThisPath:~0,-1%") do set FoloderName=%%~nx1

:: -- vbs作成 -----
(
echo.Option Explicit
echo.Dim objWord : Set objWord = CreateObject^("Word.Application"^)
echo.Dim colTasks : Set colTasks = objWord.Tasks
echo.Dim FolderName : FolderName = "%FoloderName%"
echo.If colTasks.Exists^(FolderName^) Then colTasks^(FolderName^).Close
echo.objWord.Quit
echo.Set objWord = Nothing:Set colTasks = Nothing
) > buf.vbs

:: -- 実行と削除 -----
CSCRIPT buf.vbs
del buf.vbs

参考

Deprecated features in the Windows client – What’s new in Windows | Microsoft Learn

Windows バッチファイルで格納先フォルダ名を取得 – Qiita