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

无论是在科研还是日常生活中,我们经常需要对同一目录下多个子文件夹下的文件进行移动操作。例如,可以是对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 文件:

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文件

下图展示了移动后的结果:


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

最终效果如下图(限于篇幅,仅展示了部分内容):

JIE文献搜寻

当然,大家也可以根据作者或者年份等关键字提取 PDF 文献,对于日常生活中的视频或音频类文件也可以采用类似的处理。
以上就是mvfiles的相关内容,掌握了这一命令可以很方便的完成文件的提取与转移操作。

你可能感兴趣的:(mvfiles :一次性提取多个文件夹中的文件)