Stata编程运用-运用递归函数列示文件夹内所有文件

1 篇文章 0 订阅
1 篇文章 0 订阅

问题描述:遍历文件夹下的所有文件

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'")


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值