http://blog.csdn.net/dulixin/article/details/2133840
#所有代碼如下,使用注釋的方式講解腳本
#修改好文件夾和保存結果路徑,可以把本文件直接拷貝進tcl解釋器運行
#腳本目的:返回一個文件夾下所有的文件的絕對路徑
#主要講述和操作的命令cd、pwd、glob
#次要命令:file、open、catch
#腳本思想:使用遞歸返回所有的文件路徑,可以遍歷到所有的子文件夾
#腳本以在window目錄下為例,需要在其它系統下請修改路徑名
#需要返回文件路徑的文件夾,需要注意在windows下路徑名用/間隔,tcl語言中用/間隔
set dirpath "D:/Script.NET/V2"
#進入文件夾中
cd $dirpath
pwd
#結果保存在文件中,此處以windows系統下為例
set resultfile "C:/result.txt"
#打開保存結果的文件
#catch用於捕捉發生的錯誤,使腳本不會應為錯誤而中斷,腳本中捕捉到錯誤會使用exit退出
#result變量存儲打開的結果文件I/O通道ID
if { [catch {set result [open $resultfile w+]} err] } {
puts $err
exit
}
#用於返回文件路徑名的過程
#myDir需要返回文件路徑的文件夾名
#result為保存結果的文件I/O通道ID
proc FindFile { myDir result } {
#進入目錄
if {[catch {cd $myDir} err]} {
puts $result $err
return
}
#遍歷目錄中所有文件和文件夾
#如果是文件夾則遞歸調用FindFile過程
#如果是文件直接把路徑記錄到結果文件中
foreach myfile [glob -nocomplain *] {
#進入遞歸后有可能修改當前的目錄,
#因為file命令只能對當前路徑有效果,
#所以需要保證在正確的目錄下操作文件
cd $myDir
#如果文件夾是空的,則會返回空,不記錄文件夾
if {[string equal $myfile ""]} {
return
}
set fullfile [file join $myDir $myfile]
#判斷是文件夾還是文件
#如果是文件夾則遞歸調用FindFile過程
#如果是文件直接把路徑記錄到結果文件中
if {[file isdirectory $myfile]} {
puts $result $fullfile
FindFile $fullfile $result
} else {
puts $result $fullfile
}
}
}
#執行腳本命令,返回結果
FindFile $dirpath $result
#關閉保存結果的文件I/O通道
close $result