たまにやるけど忘れるので。スペースを含まないときは別のやり方でも開くのですが、
一般的には以下のようにします。cmdの引数にエスケープされた状態で渡すというのがキモです。
string mapの変換ルールではエスケープシーケンスが適用されることに注意します。
set office_dir {C:\Program Files\Microsoft Office} set escaped_office_dir [string map {\\ \\\\} [file nativename $office_dir]] puts [concat exec [auto_execok start] explorer $escaped_office_dir] eval exec [auto_execok start] explorer $escaped_office_dir |
-- 追記
上記のスクリプトではエクスプローラで開くのが前提だったので、私のように秀丸ファイラーなどの代替ファイラーを使ってる人にとっては100%満足できるものではありませんでした。なんかこれを書いてるちょっと前にStackOverflowに同じ内容の質問が挙がってて、上記の提案をドヤ顔で投稿したところ、100%満足な回答が返ってきました。
http://bit.ly/Uu6q6N
set folderpath "C:/Program Files/Microsoft Office" exec {*}[auto_execok start] "" [file nativename $folderpath] |
ちなみに、趣旨が異なりますが、エクスプローラで指定のファイルを選択した状態でフォルダを開くには、
set out "C:/Program Files (x86)/Microsoft Office/Office14/EXCEL.EXE" exec explorer.exe /select, [file nativename $out] & |