问题描述:遍历文件夹下的所有文件
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.文件;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'")