Код, который вы использовали, почти правильный. Вы хотели этого:
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 (или более позднюю версию), поскольку они понятнее, проще в использовании и немного быстрее (не то, чтобы последнее имело здесь большое значение; разница в скорости будет быть просто шумом по сравнению со стоимостью запуска подпроцесса):
exec {*}[auto_execok start] "" [file nativename $folderpath]
Если вы используете версию 8.4 (устаревшую, но поддерживаемую) или более раннюю версию (почему!?), используйте форму с eval
формами выше.
person
Donal Fellows
schedule
06.09.2012
start
сexec
? Это постоянный источник проблем для новичков в Tcl, и проблема на самом деле из-за огромного ужаса интерфейсаstart
… - person Donal Fellows   schedule 06.09.2012