tcl/tk實例詳解——返回一個文件夾下所有文件的絕對路徑


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM