千万数量级文件整理详细记录和代码分享

河许人是一个酷爱收藏文件的人,收集的书籍、杂志及教程接近千万,估计很多文件今生都不会看它一眼,但是就是喜欢收集,收集完了堆在那里,又觉得混乱,着手整理那是很酸爽的,但是我是不能放弃的,我字典中没有放弃这个词啊!但是对于大家,文件不多的情况下,这些技巧完全无效,直接关掉当前网页就好。

废话

河许人是一个酷爱收藏文件的人,收集的书籍、杂志及教程接近千万,估计很多文件今生都不会看它一眼,但是就是喜欢收集,收集完了堆在那里,又觉得混乱,着手整理那是很酸爽的,但是我是不能放弃的,我字典中没有放弃这个词啊!但是对于大家,文件不多的情况下,这些技巧完全无效,直接关掉当前网页就好。

所以第一步,我想到了去重,其实网上公开的那些的东西又大量重复的,基本就是A下载了些B的,A也下载了些C的,B也下过A或者C的,这样下来势必又很多重复,所以去重是很必要的。

去重有大量的现成的工具就不用撸代码了。

最后找了一款现成的软件——Duplicate Cleaner Pro,就长下面这个样子,网上多的是,大家自行查找下载吧!如果实在下不到,就留言,我单独分享给你。

千万数量级文件整理详细记录和代码分享

批量删除重复文件

上面说已经有现成的软件了,为什么又写去重?

如果你是十万文件级别的,你就看到这里就可以了,上面的软件完全满足你的需求,上面软件还是不错的,通过MD5比对进行的查重,就我所知可能是最好查重方法了,可能有朋友不是很理解,这里简单展开一下,MD5方式可以查出不同名字相同内容的文件。

前面我已经说了我有接近千万级别的文件,这时候问题来了,查重大致需要十多个小时吧!后面删除的时候竟然删除不掉!!!一点删除就卡死……

但是也不是一点用没有,虽然不能去重但是可以把数据以csv格式导出来,这样的话自己撸代码也好处理了!

千万数量级文件整理详细记录和代码分享

csv也是ahk支持的标准格式,用记事本打开大致长这个样子。

千万数量级文件整理详细记录和代码分享

逻辑是比较清楚的,伪代码几乎都不用。

这里有个坑直接分享给大家,CSV格式的数据拆分的时候,一般情况下我们直接使用“,”作为分隔符,在这里会报错,原因是部分文件的标题中竟然有逗号,所以我采用双引号做的分隔符进行数据拆分。

代码如下:

用代码还是很溜,一二十分钟吧200万+的重复文件被清除!

使用方法:把代码拷贝为ahk文件,修改里面的is.csv为你自己导出的数据库名字就好了!再次提醒文件少的话不需要自己撸代码,上面软件几乎是傻瓜式的看一下基本就知道了。

批量删除空文件夹

重复文件清除之后,新问题又出现了,层层打开某个感兴趣的文件夹名字的时候,发现里面是空的,顿时心中十万个羊驼滚滚而过。

怎么办?就一个字,干!

也不能蛮干!我解决问题的原则就是能用现成的就用现成的,没有现成的改造现成的,无法改造的时候才自己撸代码,毕竟撸代码也是一个体力活。想着这样的问题也不会只有我一个人有,一百度还真有!

不过是bat版本的,那也行!能解决问题才是硬道理。我觉得遇到这个问题的老哥也是凤毛麟角,没必要整那么立正,所以各位老哥将就着用吧!

代码如下:

@echo off
 setlocal enabledelayedexpansion
del /q c:empty_dir
del /q c:directory.txt
REM 下面的代码加上sort /r ,表示逆序排列文件夹。子文件夹在前,父文件夹在后。
dir /a:d /b /s "."  | sort /r > "%cd%directory.txt"
for /f "usebackq delims=" %%i in ("directory.txt") do (
    rem echo "enter dir is: %%i"
    rem cd "%%i"
    rem echo "the bat path is: %~f0" rem print this batfile's whole path.
    echo "cur dir is: "%%i""
    REM 将当前目录下的所有文件打印到以下文件中:
    dir /a /b "%%i" >"c:folder_content.txt"
    rem echo "======================================================="
    rem echo "==================fold content: begin ================="
    :type "c:folder_content.txt"
    rem echo "==================fold content: end   ================="
    rem echo "======================================================="
    
    REM 下面的findstr命令查找当前文件是否有内容,如果查找成功表示目录不是空的,否则是空的。
    REM 注意下面的两个 '与' 和 两个 '或' 符号。    
    findstr . "c:folder_content.txt" >nul 2>nul && ( echo "The folder "%%i" is NOT NOT NOT empty") || ( echo "The folder "%%i" is empty" && echo "%%i">>"%cd%empty_dir" && rd "%%i")
    del "c:folder_content.txt"
    )
 del  "%cd%directory.txt"
pause

使用方法:拷贝到txt,保存,修改后缀为bat,丢到需要清理的目录双击运行即可。

千万数量级文件整理详细记录和代码分享

后面需要的处理可能还有很多,后续如果有的话再更新吧!

给TA捐赠
共{{data.count}}人
人已捐赠
其他案例

滑块验证码的简单处理办法

2021-4-7 11:22:36

案例

SciTE4AutoHotkey增强版 白色背景、语法高亮设置

2021-4-19 19:36:26

2 条回复 A文章作者 M管理员
  1. heku

    很多重复的音乐 用这个删除一下!感谢

  2. 阿仁

    楼主厉害!赞一下!

个人中心
购物车
优惠劵
有新私信 私信列表
搜索