美文网首页stata:data mining
mvfiles :一次性提取多个文件夹中的文件

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

作者: autumn1919 | 来源:发表于2019-04-29 22:09 被阅读0次

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

        本文链接:https://www.haomeiwen.com/subject/ewfpnqtx.html