我正在编写一个报告脚本,它是便携式测试包的一部分。用户可以在他们的系统上的任何地方解压缩包,这很好,但这意味着我无法对路径进行硬编码。
让我们说在我的系统上,这个脚本位于C:/projects/testpackage/foo/bar/script.tcl。我需要设置一个变量packageLocation,即/ testpackage的路径。在这个例子中,它将是C:/ Projects / testpackage。但是当用户获得包裹时,他或她可以将它放在任何地方,如:
C:/用户/不管/ testpackage
那么,如何从我当前运行的脚本的位置调用两个级别?在批处理中,我可以做到
:: example.bat
cd %~dp0
cd ../..
set packageLocation=%cd%
在Tcl,我迷路了。我知道正在运行的脚本的当前位置可以称为$ :: argv0。我尝试过使用cd .. / ..但无济于事。它尝试将packageLocation设置为“../ .. C:/Projects/testpackage/foo/bar/script.tcl。”
感谢任何帮助。谢谢!
答案 0 :(得分:3)
set where [file normalize [file dirname [info script]]]
set parts [file split $where]
set pkgloc [file join {*}[lrange $parts 0 end-2]]
应该做你想做的事。
它是这样的:
~
,..
等。)如果你有Tcl< 8.5,最后一行必须重写:
set last [expr {[llength $parts] - 3}]
set pkgloc [eval [list file join] [lrange $parts 0 $last]]