社員に自己署名入りデジタル証明書を発行させたくて作りました。
(メール誤送信防止用にoutlookのVBAコードを仕込むため)
VBEのイミディエイトウィンドウからshell "selfcert.exe"
と打たせてもよいのですが、もっと簡単な手順にしたくて<オフィスのインストール場所>\selfcert.exeをたたくバッチファイルを作成しました。
echo off
for /f "usebackq" %%t in (`assoc .xlsx`) do set work=%%t
set work1=%work:~6%
for /f "usebackq delims=" %%a in (`ftype %work1%`) do set work2=%%a
call :edit_filename %work2%
exit /b
:edit_filename
for /f "usebackq delims=" %%a in (`"%~dp2\selfcert.exe"`) do echo %a
コマンドの解説)
assoc .xlsx
で.xlsx=Excel.Sheet.12
のようにエクセルのタイプが返ってくるので、:~6%
でExcel.Sheet.12
を取得
ftype Excel.Sheet.12
とやると
Excel.Sheet.12="C:\Program Files (x86)\Microsoft Office\Office16\EXCEL.EXE" /dde
のように返ってきます。
スペースで結果が区切られないようにデリミタの指定はdelims=
のように無しにしています。
この結果をサブルーチンで受け取って
"%~dp2\selfcert.exe"
で第2引数からドライブレターとパスを取ることで”オフィスのインストール場所にあるselfcert.exe”をキックする仕組みです。