本帖最后由 ssh@echo_off 于 2023-5-2 21:23 编辑 5 B9 `# F. q& {% q( `" V, S6 S 2 m, ]' B# C! X0 X" S. j' \文件夹套娃和多层压缩包可能是各位访问电脑资料时遇到的最抓狂的事情了,文件夹套娃遇到的概率比较小,但是多层压缩包对于“老司机”来说可能是家常便饭了,尤其是在压缩包数量足够多还有压缩层数大于等于3时,解压时痛苦的滋味当事人肯定是体会过的。在准备写这款工具之前,我就遇到了这两重buff叠加(3层压缩,解压后外加三层文件夹套娃),而且硬盘容量也只放得下刚刚下好的压缩包(资料有150G,硬盘装完压缩包后还剩100G左右),没有空间同时存放解压后的资料的“超级窘境”。当时虽然手头有Advanced Renamer文件移动工具,而且自己还专门为此写过简单的批处理来进行批量解压,但是效果还是不好,误删了一些文件。像我这样有点经验和工具的人在面对文件夹套娃和多层压缩包时都显得力不从心,更何况是普通人呢?于是我便有了专门写一款工具来解决这种问题的想法。# [+ s+ L+ ?- |" X9 p0 v: T(欢迎访问老王论坛:laowang.vip)
3 x* t( @3 P8 r, G; P1 e(欢迎访问老王论坛:laowang.vip)
想法有了,就得开始一个个解决问题了。首先就是设计好批处理的运行逻辑,使它能够同时处理套娃和压缩包,而且一次处理过后如果还有套娃和压缩包,会自动循环直到全部处理完成,此外还要设计好递归,使批处理能够一次性解决掉目录下的所有子项,这个就不多说了,比较复杂;其次就是如何判断解压是否成功。我初次选择的是bandizip,它的解压速度算是数一数二的,但是它不能通过命令行输出日志文件,想判断是否成功还得想别的办法,这让我一度想换7zip,不过最终我借助autohotkey成功捕捉到了bandizip运行窗口的信息,并且通过autohotkey语言识别并自动处理解压失败的情况,这个问题就这样解决了;第三个问题是如何在解压失败时准确地删除那个多出的文件夹。解决的办法是每次解压前先把当前目录下所有的文件夹名称都记录下来,然后进行根据这份记录进行对比,删除掉多出的那个文件夹。一开始我用的是批处理的echo追加写入文件,然后用find进行查找比对,但是发现一旦文件夹里有特殊字符,就会出错,后来我花钱请了个程序员帮助我写了个插件程序,解决了这个问题。即使有专业程序员帮忙,过程也是一波三折,主要问题还是出现在文件夹名称里的特殊字符,因为这个插件程序首先得知道目标目录在哪,传递参数时文件夹名称里只要有特殊字符就歇菜了,还好我想到个办法,在批处理中cd到目标目录,调用我写的程序(autohotkey立了大功)将当前完整的绝对路径以UTF-8编码的方式写入到一个txt中,然后再把这个txt文件移动到那个程序员写的插件程序(detector.exe)的同目录下,这样插件程序就可以直接调用和自己同目录下的txt文本中的路径信息,成功解决了这个问题。 3 {" T3 s% @. G3 ^这个工具软件我从快要过年一直抽空余时间(摸鱼)忙到现在,不过好在功夫不负有心人,让我等到了完成的这一天。 - L( a4 F! b K0 u. |0 |2 i, j. x# A7 }, u(欢迎访问老王论坛:laowang.vip)
" {( Y+ r- Y) y: f# Z# M(欢迎访问老王论坛:laowang.vip)
$ V1 j) G6 z. c" m7 d(欢迎访问老王论坛:laowang.vip)
4 c; B3 @% S9 U2 R2 Y. o! L下面简单介绍一下这个软件:软件可以解除一个目录下所有子项的多层压缩还有文件夹套娃,支持目标路径(也就是需要处理的文件夹)里有各种特殊记号、表情包;只要提前把所有的密码设置进去,即使每层压缩包的密码不同,而且压缩层数多到令人发指,理论上不出错的话,也都可以给你解开;一旦一个压缩文件解压成功,就会被删除(不可逆,不会进回收站。不过可以放心,判断的准确率很高,截至到现在,还没出现过解压失败却还是删除原压缩文件的情况),释放空间,解压出错的文件将维持原样;解压用的是bandizip(v7.30绿色便携版),相信可以为你省出不少时间;同时还能够递归删除目标目录下的指定文件,比如小姐姐图片里的推广链接(*.url)和推广用的txt文件。5 F, A: X2 l. z(欢迎访问老王论坛:laowang.vip)