Stata編程運用-運用遞歸函數列示文件夾內所有文件

問題描述:遍歷文件夾下的所有文件

E:\project\abc\

E:\project\abc\abc000001(1).txt

E:\project\abc\abc000002(1).xls

E:\project\abc\def\def000001(1).txt

E:\project\abc\ghi\


需要將所有文件的(1)去掉。



解決難點:需要給出所有的文件,但有些目錄下是沒有文件的。

解決方案:利用遞歸函數,遍歷所有的文件。

思路如下:

  1. 對於一個文件夾下的“對象”可以分成兩類:1.文件;2.子文件夾;
  2. 對於文件,進行改名操作;對於文件夾,繼續調用本函數進行處理(因爲這時就又變成了處理一個文件夾的問題)。


cap program drop dirlist 
program define dirlist

syntax, fromdir(string)
//對於當前文件夾(由參數`fromdir'給定)下的對象,可以分爲“文件”和文件夾兩類
//其中文件可以通過 local localname: dir dirname files "*" 存放在宏 localname中
//而文件夾則可以通過 local localname: dir dirname dirs "*" 
//1.文件-->輸出
local flist: dir "`fromdir'" files "*"
foreach f of local flist {
   *dis "`fromdir'/`f'"
}

//2.子目錄-->遞歸調用主函數
local dlist: dir "`fromdir'" dirs "*"
foreach d of local dlist {
   dirlist , fromdir("`fromdir'/`d'") `list'
}
end
local cdir = "`c(pwd)'"
dirlist, fromdir("`cdir'")


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章