TCL / tk如何打开文件夹

时间:2012-09-05 09:37:58

标签: exec tcl tk

我正在尝试使用以下命令从tcl / tk打开一个文件夹

eval exec [auto_execok start] [list $folderpath]

它给我的语法错误是错误的。

我尝试时在tclsh命令提示符下

start $folderpath文件夹打开。

感谢任何帮助。

3 个答案:

答案 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