以下のコマンドを使用して tcl/tk からフォルダーを開こうとしています
eval exec [auto_execok start] [list $folderpath]
構文が正しくないというエラーが表示されます。
tclsh コマンド プロンプトで
start $folderpath
、フォルダーを開いてみました。
どんな助けでも大歓迎です。
使用していたコードはほぼ正しいです。あなたはこれが欲しかった:
eval exec [auto_execok start] [list "" $folderpath]
これは、消費するために余分な空白の引数が必要だったためですstart
(これは、作成するウィンドウの「タイトル」であり、相対ファイル名のみを入力することに慣れている場合はかなりわかりにくくなります)。start
これは、 TclがWindowsプロセス作成インターフェイスを介して供給されるものの見積もりを行う方法と組み合わされた、の特定の癖です。何が起こるかというと、Tclは"
charsを単純でない引数(ほとんどの場合正しいこと)に丸めstart
、混乱して間違ったことをし、エラーメッセージを表示します。これはかなり恐ろしいことですが、空の引数を追加すると問題が解決します。
まだ行っていない場合は、そのパスをネイティブ形式に変換する必要がある場合もあります。
eval exec [auto_execok start] [list "" [file nativename $folderpath]]
(それがネイティブであるかどうかをどうやって知るのですか?ディレクトリ区切り文字が/
— Tcl標準であり、UnixおよびOSXでもネイティブである—または\
— Windowsが使用するものであるかどうかを確認してください。)
場合によっては、file attributes $folderpath -shortname
問題を回避する必要があります。私はあなたがそれを必要としないことを望みます!(公平を期すために、最近はほとんど何もしていません。非常に長いパスを処理するときに時々役立つものの、XP以前のシステムでのみ重要でした。)
Tcl 8.5(またはそれ以降)を使用している場合は、Glennによって提案された構文上の変更を使用することをお勧めします。これは、より明確で使いやすく、わずかに高速でもあるためです(ここでは、最後の変更はそれほど重要ではありません。速度の違いにより、サブプロセスを開始するコストと比較して、単なるノイズである):
exec {*}[auto_execok start] "" [file nativename $folderpath]
8.4(古いがサポートされている)または以前(なぜ!?)を使用している場合は、eval
上記のフォームでフォームを使用してください。
グレンのソリューションは、スペースを含むフォルダーでは機能しません。私の解決策は次のとおりです。
set dir {C:\Program Files\Microsoft Office};# example
set escaped_dir [string map {\\ \\\\} [file nativename $dir]]
eval exec [auto_execok start] explorer $escaped_dir
しかし、別のファイラーを使用しているため、デフォルトのファイラーでフォルダーを開く方法を知りたいです。
Tcl 8.5 を使用している場合は、次のように記述できます。exec {*}[auto_execok start] $folderpath