无论是在科研还是日常生活中,我们经常需要对同一目录下多个子文件夹下的文件进行移动操作。例如,可以是对endnote生成的多个子文件夹下的pdf文档移动到一个文件夹,也可以是对视频文件的移动操作,等等。本文将介绍从多个文件夹提取文件的命令:mvfiles
。
首先,在Stata 的命令窗口安装该命令:
ssc install mvfiles
安装完成后,可以看到,mvfiles
有如下语法结构:
mvfiles[,infolder(string) outfolder(string) match(string) subs(string) makedirs erase oldstx]
-
infolder
选项是待搜寻的文件所在的文件路径 -
outfolder
选项是目标文件路径 -
match
选项是文件匹配准则 -
subs
选项用来确定匹配准则是否应用于子文件夹 -
makedirs
选项用来生成目标文件夹 -
erase
选项用来移除原来的文件,仅保留目标文件夹下的文件 -
oldstx
选项较少使用
下面将通过几个实例展示mvfiles
的具体用法。
1. 基于 auto 数据的模拟
本小节将利用 Stata 自带的 auto 数据生成 excel 文件及相应的文件夹,然后利用 mvfiles
移动各个子文件夹中的 excel 文件。
1.1 excel 文件的移动
- 生成 excel 文件
cap mkdir "d:\data" //新建工作文件夹data
cd d:\data //将d:\data作为当前工作路径
webuse auto, clear //读入auto数据
// 利用循环,在 data 文件夹下生成 10个excel 文件,分别命名为 auto1-auto5, sub1-sub5
forvalues i=1(1)5{
export excel auto`i'.xlsx,replace
export excel sub`i'.xlsx,replace
}
运行上述代码,得到下图所示的10个 excel 文件:
如果想将
d:\data
文件夹下的 sub1-sub5等5个 excel 文件移动至 d:\data\move_sub
文件夹下,可以采用如下命令:
mvfiles , infolder(".") outfolder(".\move_sub") match("sub*") makedirs erase
// match 选项表明是通过开头的sub字符作为匹配标准
// makedirs 用来生成 move_sub 子文件夹
// erase 选项将d:\data下的原始文件删除,相当于执行了剪切的操作,
而代码:
mvfiles , infolder(".") outfolder(".\move_all") match("*") makedirs erase
则将 d:\data
文件夹下的所有 excel 文件移动至 move_all
子文件夹下。
1.2 子文件夹下 excel 文件的提取
本小节首先在 d:\data
下生成若干子文件夹及excel文件,然后展示excel 文件在子文件夹中的提取过程。
- 在
d:\data\
下生成10个子文件夹,分别命名为 auto1-auto5 及sub1-sub5,并在每个子文件夹下生成相应的excel文件。 - 代码如下:
forvalues i=1(1)5{
cap mkdir "d:\data\auto`i'"
cap mkdir "d:\data\sub`i'"
cd "d:\data\auto`i'"
webuse auto, clear
export excel auto`i'.xlsx,replace
cd "d:\data\sub`i'"
webuse auto, clear
export excel sub`i'.xlsx,replace
}
这样便生成了10个子文件夹,并在每个子文件夹下生成了1个 excel 文件,文件名称与文件夹名称一致,结果如下图:
现在,只需要如下简单的命令就可以将以
auto
开头的子文件夹下的 excel 文件统一移至 move_data
文件夹下。
cd d:\data
mvfiles , infolder(".") outfolder(".\move_data") match("auto*") subs("auto*") makedirs
// subs选项用来选择匹配的子文件夹,此处选择的是子文件夹名称为auto的
文件夹中的excel文件
下图展示了移动后的结果:
2. endnote 中 pdf 文件的提取
在使用 endnote 软件管理文献的过程中,在电脑硬盘下会形成如下图所示的文件夹布局形式(限于篇幅,只截取了部分内容):
上面的每个子文件夹中保存着相应的文献(PDF格式),现在想获取所有子文件夹下 PDF 文件名称中包含
JIE
字符的文件,并移动至literature_JIE
文件夹下(设想一下,某一天,心血来潮,想看看自己收藏了多少JIE论文), 代码可以写为:
cd "d:\***\My Library-literature.Data\PDF"// 更换工作路径,注意:***位置替换为自己的文件路径
// 在所有子文件夹下,按照关键字 JIE 匹配 PDF 文件,并进行移动操作
mvfiles , infolder(".") outfolder(".\literature_JIE") match("*JIE*") subs("*") makedirs
最终效果如下图(限于篇幅,仅展示了部分内容):
当然,大家也可以根据
作者
或者年份
等关键字提取 PDF 文献,对于日常生活中的视频或音频类文件也可以采用类似的处理。
以上就是
mvfiles
的相关内容,掌握了这一命令可以很方便的完成文件的提取与转移操作。