我正在尝试使用以下命令从tcl / tk打开一个文件夹
eval exec [auto_execok start] [list $folderpath]
它给我的语法错误是错误的。
我尝试时在tclsh命令提示符下
start $folderpath
文件夹打开。
感谢任何帮助。
答案 0 :(得分:1)
glenn的解决方案不适用于包含空格的文件夹。 我的解决方案是:
set dir {C:\Program Files\Microsoft Office};# example
set escaped_dir [string map {\\ \\\\} [file nativename $dir]]
eval exec [auto_execok start] explorer $escaped_dir
但是我想知道如何在默认文件管理器中打开文件夹,因为我使用了另一种文件管理器。
答案 1 :(得分:1)
您使用的代码几乎正确。你想要这个:
eval exec [auto_execok start] [list "" $folderpath]
那是因为你需要额外的空白参数来使start
消耗(它是要创建的窗口的“标题”,如果你习惯只提供相对文件名,则相当模糊)。这是start
的特定怪癖,结合Tcl如何引用通过Windows进程创建界面提供的内容;会发生什么事情是Tcl将"
个字符放在非简单的参数上(几乎总是正确的事情)并导致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
表单的表单。
答案 2 :(得分:0)
如果你使用tcl 8.5,你可以写:exec {*}[auto_execok start] $folderpath