c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹

? 连享会主页:lianxh.cn

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第1张图片

连享会 · 名师讲坛


? 空间计量 专题
⌚ 2020.12.10-13

? 主讲:杨海生 (中山大学);范巧 (兰州大学)

? 课程主页:https://gitee.com/arlionn/SP

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第2张图片

连享会 · 计量专题


? 因果推断-内生性 专题
⌚   2020.11.12-15
? 主讲: 王存同 (中央财经大学);司继春(上海对外经贸大学)
? 课程主页:https://gitee.com/arlionn/YG

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第3张图片

作者: 徐云娇 (厦门大学)邮箱: [email protected]


目录

  • 1. 问题背景

  • 2. 问题难点

  • 3. 解决方案

  • 4. 命令解析

  • 5. 处理效果

  • 6. 结语

  • 参考资料和扩展阅读


温馨提示: 文中链接在微信中无法生效。请点击底部

1. 问题背景

一场新冠肺炎疫情,改变了传统的线下考试模式,很多学校期末考试的收卷、改卷、归档已经全面实现了无纸化。线上考试尽管可以跨越空间的约束解决学校的燃眉之急,但后期助教们在对学生 PDF 试卷进行建档的时候,大多工作都是一些重复劳动,于是我们便想利用 Stata 实现一些优化。

原始答卷是学生以 “姓名+学号” 作为命名的分录题作答的 PDF 文档,以及以 “姓名” 作为命名的选择题答题结果的 PDF 文档,如图:

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第4张图片 c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第5张图片

学院对学生试卷建档的具体要求是:

  • 为班级中每个同学建立专属的文件夹,命名规则为:姓名+学号;

  • 将每个学生选择题和分录题的两份 PDF 放入他们对应的文件夹内。

2. 问题难点

  • 学生的 “姓名+学号” 既包含不同的字符又包含不连续的数字,因此在创建以此命名的文件夹时, forvalue 的循环语句失效;
  • 利用 dir 命令批量提取 PDF 文档文件名称时,文件名称中的空格也将被保留下来,且文件名的后缀名也无法去除;
  • 如何批量创建无规则命名的文件夹,并将每个学生的答卷移入其对应的文件夹中。

3. 解决方案

  • Stata 循环语句 (foreach)

  • 处理文字的函数 (subinstrsubstr)

  • 「Stata: 如何快速合并 3500 个无规则命名的数据文件?」

  • 「mvfiles:一次性提取多个文件夹中的文件」

温馨提示: 文中链接在微信中无法生效。请点击底部

4. 命令解析

以下是解决上述问题的 Stata 程序:

clear
cd C:\Users\jilyo\Desktop\分录题
local file1: dir "\Users\jilyo\Desktop\分录题" files "*.pdf" //读取分录题文件夹中 PDF 的文件名
dis `file1'
foreach file in `file1'{
local file2 = subinstr("`file'",".pdf","",.) //去掉文件名后缀.pdf
local file3 = subinstr("`file2'"," ","",.) //去掉文件名中的空格
local files "`files' `file3'" //将全部处理过的文件名存在一个暂元中
}
dis "`files'"

foreach file in `files'{
local subname = substr("`file'",1,6) //提取每个文件名前两个中文字符,后续匹配之用
dis "`subname'"
mvfiles, infolder(".") outfolder(./`file') ///
match(`subname'*) makedirs erase //为每一个 PDF 建立一个同名文件夹,并且将分录题 PDF 放入文件夹中
mvfiles, infolder("\Users\jilyo\Desktop\选择题") outfolder(./`file') ///
match(`subname'*) erase //将选择题 PDF 放入文件夹中
}

以上命令解决问题的步骤如下:

  1. 利用 dir 命令批量提取存放于电脑桌面的 “期末考试” 这一文件夹中所有 .pdf 格式文件的文件名称,并将其存放于 file1 这个暂元中;

file1 暂元中存放的文件名中含有文档的后缀名 .pdf,这会导致后续使用 mvfiles 命令批量创建的文件夹名称中也含有 .pdf 字样,不美观且不符合学院要求。

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第6张图片
  1. 利用 subinstr 命令去除 file1 文件名的后缀名,并将结果存放于 file2 暂元中;

暂元 file2 中存放的单个文件名中存在空格,在没有 .pdf 后缀的情况下,如果保留空格,则会导致后面的 foreach 循环语句识别混乱,比如 “张三 12345” 经过循环之后会创建出 “张三” 和 “12345” 两个文件夹。

  1. 按照同样的思路,利用 subinstr 命令去除 file2 文件名中的空格,并存放于file3 暂元中;

  2. 将每次循环的结果保存在 files 暂元中;

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第7张图片
  1. 结合 foreach 以及 mvfiles 命令批量创建以暂元 files 中元素命名的文件夹,即以学生 “姓名+学号” 命名的文件夹;

部分 PDF 答卷命名中包含空格,所以在匹配 PDF 文件并将其拖入对应名称的文件夹过程中出现困难,比如学生将其 PDF 答卷命名为 “张三 12345” (含有空格),但 mvfiles 命令在匹配时寻找的是“张三12345” (不含空格),所以张三同学的答卷便未能被拖入以 “张三12345” 命名的文件夹内;

  1. 利用 substr 命令提取暂元 files 中元素的前 6 个字符,比如 “张三12345” 将被提取 “张三” 这两个中文,将提取结果存放于 subname 暂元中;

  2. 最后, mvfiles 命令会将 “分录题” 和 “选择题” 文件夹中含有 “张三” 字段的 PDF 文件放置于以 “张三12345” 命名的文件夹中,并删除原始的 PDF 文件。

5. 处理效果

处理之后为每个学生新建了一个文件夹,命名规则是 “姓名+学号”。

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第8张图片

每一个文件夹打开都是对应学生分录题和选择题的答卷。

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第9张图片


6. 结语

  • 应用场景拓展:此批量整理 PDF 文档的方法同样适用于文献管理,假如下载了一批文献之后想为这些文献创建同名文件夹,日后存放文章的代码或者学习笔记等,那么便可利用此方法快速创建。

  • 关于推文涉及命令更详细的语法帮助,可在 Stata 中键入:

  • help mvfiles

  • help macro

  • help extended_fcn

  • help rcd    // 自循环,外部命令

  • help uall   // adoedit uall.ado 可以查看内部语句

参考资料和扩展阅读

  • 连享会推文:Stata: 如何快速合并 3500 个无规则命名的数据文件?
  • 连享会推文:mvfiles:一次性提取多个文件夹中的文件
  • 连享会推文:Stata中文乱码顽疾解决方法
  • 连享会推文:Stata数据处理:用-efolder-快速生成文件夹和子文件夹
  • 连享会推文:Stata数据处理:ftree命令-用txt文档记录文件夹结构

? 因果推断-内生性 专题   ⌚ 2020.11.12-15
? 主讲: 王存同 (中央财经大学);司继春(上海对外经贸大学)
? 课程主页:https://gitee.com/arlionn/YG

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第10张图片

? 空间计量 专题   ⌚ 2020.12.10-13
? 主讲:杨海生 (中山大学);范巧 (兰州大学)
? 课程主页:https://gitee.com/arlionn/SP

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第11张图片

? ? ? ?
连享会主页:? www.lianxh.cn
直播视频:lianxh.duanshu.comc循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第12张图片

免费公开课:

  • 直击面板数据模型:https://gitee.com/arlionn/PanelData - 连玉君,时长:1小时40分钟
  • Stata 33 讲:https://gitee.com/arlionn/stata101 - 连玉君, 每讲 15 分钟.
  • 部分直播课课程资料下载 ? https://gitee.com/arlionn/Live (PPT,dofiles等)

温馨提示: 文中链接在微信中无法生效。请点击底部


关于我们

  • ? 连享会 ( 主页:lianxh.cn ) 由中山大学连玉君老师团队创办,定期分享实证分析经验。
  • ? 直达连享会:百度一下:连享会】即可直达连享会主页。亦可进一步添加 主页,知乎,面板数据,研究设计 等关键词细化搜索。

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第13张图片 连享会主页  lianxh.cn

?  连享会小程序:扫一扫,看推文,看视频……

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第14张图片

? 扫码加入连享会微信群,提问交流更方便

c循环创建文件名_Stata:为无规则命名的文件批量创建同名文件夹_第15张图片

? 连享会学习群-常见问题解答汇总:
?  https://gitee.com/arlionn/WD

你可能感兴趣的:(c循环创建文件名)