WSHで空白のあるパスと引数を持つサブプロセスコマンド起動

実は探して無かったので記述。

test.vbs

Option Explicit

Dim objWShell
Set objWShell = CreateObject("WScript.Shell")
objWShell.Run """notepad.exe"" ""c:\test.txt""", 1, False
Set objWShell = Nothing

サンプルでは空白は含まれていないが、

.Run “””実行ファイルフルパス”” “”引数1″” “”引数2″” …””最後の引数”””

が基本。解説するとダブルクオーテーション内にある[“”]は一つの[“]として展開されるため。

つまり.Runは行の外側の”を外した「 “”実行ファイルフルパス”” “”引数1″” “”引数2″” …””最後の引数”” 」と捉え更にシステムに対し「 “実行ファイルフルパス” “引数1” “引数2″ …”最後の引数” 」と実行する。

頭から3連続”””相当ビビってしまったが。

もし引数にクオーテーションが必要でないなら、

objWShell.Run """notepad.exe"" -help c:\test.txt", 1, False

のような書き方も出来る。

また、.Runの引数の「,1,False」については、「通常のウインドウで前面に出てくる」「終了を待たずに次の行を実行」だが良くある説明なので略。