Please enable Javascript to view the contents

【实用脚本】文件夹二向箔,扫平文件夹封建等级制度

 ·  ☕ 3 分钟

背景

最近有份电子材料要处理,文件夹套了一层又一层,于是就有了将所有文件提取到文件夹根目录的需求。我把该功能需求叫做文件夹二向箔,汇总了一些常用的子目录文件提取方法。

二向箔

二向箔

二向箔是在中国科幻名匠刘慈欣的作品《三体III:死神永生》中登场的宇宙规律武器之一。首次出现于一艘来自歌者“母世界”的宇宙飞船。二向箔专门用于清除那些隐藏在结构较复杂的恒星系统中的弱小文明。因此二向箔对于高等星际文明来说并不是武器,而是一种高效的清理工具。但是它在宇宙间的滥用却极大加速了宇宙的死亡。

三维空间由上下、左右、前后三个维度构成。而二向箔与三维宇宙接触的瞬间,会使其中一个维度由宏观蜷缩至微观,从而迫使三维宇宙及其中的所有物质向二维宇宙坍塌,并在二维空间中“融化”为只存在长度和面积而被剥夺了体积概念的绝对平面。

搜索法

文件夹套了一层又一层?快速分离文件和文件夹的小技巧 - 少数派

在 Windows 环境下有一个很简便的方法来分离文件和文件夹。使用资源管理器右上角的搜索功能,搜索内容为「.」或者「*」,搜索结果就将文件和文件夹区分开来了。这时候选中所有文件,剪切到你想要的地方即可。

搜索法

可用性评价

无需插件,简单易操作。就是要手动拷贝,不那么极客。

PowerShell 脚本法

Powershell: Move all files from folders and subfolders into single folder - Stack Overflow

执行以下操作,可将 SOURCE 目录下的所有文件移动到 DEST 目录:

1
Get-ChildItem -Path SOURCE -Recurse -File | Move-Item -Destination DEST

还可以添加过滤器,如只移动 .png 文件:

1
Get-ChildItem SOURCE -Recurse -Filter "*.png" | Copy-Item -Destination DEST

可用性评价

无需插件,方法极客,操作简单。就是需要手动输入代码和目录。

MoveFilesUpFromSubfolders.exe

Flatten Folder Structure, Move Files from Sub-Folders to Main | SumTips

这是个很通用的需求,所以有很多现成的脚本。找到一个通用的可执行文件 MoveFilesUpFromSubfolders.exe,添加到Path环境变量,然后就可以使用了。

MoveFilesUpFromSubfolders.exe

可用性评价

简单好用,基本上可以满足所有需求。只是它下手太重,会把所有文件拷贝到顶层目录,并且把原来的文件夹删除。

自定义python脚本

比较了以上几种方法,我整理了一下需求:

  • 可剪切可拷贝
  • 不指定目录即为当前目录
  • 可通过文件后缀过滤

步骤1:python脚本

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import os
import itertools
import shutil
import argparse

def move(destination,extension=None,copy=True):
    all_files = []
    for root, _dirs, files in itertools.islice(os.walk(destination), 1, None):
        for filename in files:
            if extension is None or filename.endswith(extension):
                all_files.append(os.path.join(root, filename))
    for filename in all_files:
        if copy: 
            shutil.copy(filename, destination)
        else:
            shutil.move(filename, destination)

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='一个打平文件夹的脚本')
    parser.add_argument('-f','--folder',type=str,default=os.getcwd(), help='要打平的文件夹')
    parser.add_argument('-ext','--extension', type=str, help='打平后的文件的后缀')
    parser.add_argument('-c','--copy',action='store_true', help='True,是否复制文件,直接移动或复制')
    args = parser.parse_args()
    print('文件夹二向箔功能启动,扫平文件夹封建等级制度...')
    print('正在打平该目录',args.folder)
    print('待打平文件后缀为',args.extension)
    print('是否复制文件',args.copy)
    print('... ...')
    move(args.folder,args.extension,args.copy)
    print('完成')

步骤2:打包python脚本exe

安装 pyinstaller、 auto-py-to-exe。打包python脚本。

auto-py-to-exe

步骤3:添加到Path环境变量,使用

如图,可将该目录下,所有的mobi文件提取到当前目录。

flatten.exe演示

参考资料


欢迎关注我的公众号“码农真经”,原创技术文章第一时间推送。

分享

码中人
作者
码中人
Web Developer