[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
回复 30# 77七


    用自带的certutil就可以计算各类哈希值
1

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 31# buyiyang


   谢谢大佬指点!重新写了一个。
  1. @echo off
  2. rem http://bbs.bathome.net/redirect.php?goto=findpost&ptid=53343&pid=221896
  3. for /r /d %%d in (*) do (
  4. pushd "%%d"
  5. setlocal
  6. for %%a in (*.jpg) do (
  7. for /f %%i in ('certutil -hashfile "%%a" MD5 ^| findstr /v "[^0-9a-z]"') do (
  8. if defined _"%%i" (
  9. del "%%a"
  10. ) else (
  11. set _"%%i"=1
  12. )
  13. )
  14. )
  15. endlocal
  16. popd
  17. )
  18. pause
复制代码
1

评分人数

bat小白,请多指教!谢谢!

TOP


对图片/音频/视频去重是个常用操作,尤其是用文件的哈希值(md5)比对去重是个比较高效的方法,但用批处理脚本实现,至少有两个很有用的经验可供参考》
一。应该先对目标目录中的文件按尺寸排序,以便能够忽略其中大部分尺寸相异者,若舍此而去遍历每个文件计算其哈希值,当文件量过千后就有些难受了。例如,5000个文件去重了10个,即可估算前后两种方法所需哈希值计算量的效率之差了。
二。采用纯P的“字典”数据表来对应所有处理对象,比折腾外部数据交换的效率高很多,但会受限于CMD的8k个变量总空间,也就是处理对象/文件数量不要超过此限。好在个人家用较少有单个目录文件量超过此限,因此,单个目录的文件去重,对于纯P是可以驾驭的。
1

评分人数

TOP

回复 29# wanghan519


    链接:https://pan.baidu.com/s/1NK6rIHtoy1QLbsnoMYTRyw?pwd=ixl0
提取码:ixl0
--来自百度网盘超级会员V2的分享

TOP

回复 32# 77七


    感谢,可以了

TOP

回复 32# 77七

不知为啥,我这边运行时,第7行for in里面那句certutil -hashfile "%%a" MD5 ^| findstr /v "[^0-9a-z]" 结果总是空的

TOP

回复 36# Five66


   0字节文件好像不能获取md5
bat小白,请多指教!谢谢!

TOP

回复 37# 77七

不是0字节文件,不知道是不是是系统问题,我这里(不是win10系统)输出的md5好像是带有空格的:
输出是这样的:
MD5 hash of file 33.jpg:
71 51 39 e0 db b7 2e f2 89 ce 4a 3c 02 92 7b 50
CertUtil: -hashfile command completed successfully.

TOP

回复 38# Five66


  
改为find /v ":",过滤,可能更好,看了好几个帖子,都用的findstr
bat小白,请多指教!谢谢!

TOP

回复 39# 77七

findstr /e "[0-9a-z]" 也能过滤,不过还得处理空格

TOP

回复 34# a475012621


    修改了一下powershell代码,一会再试试先比较大小,再算md5,以加快速度
  1. cd 测试
  2. $d=@{};dir -File -Recurse | sort -Descending | % {$m=$_.DirectoryName+"\"+(Get-FileHash $_.FullName -Algorithm MD5).Hash;if($d.ContainsKey($m)){rm $_.FullName}else{$d.Add($m,1)}}
复制代码
1

评分人数

TOP

回复 41# wanghan519


    谢谢,费心了,应该没问题了

TOP

本帖最后由 aloha20200628 于 2023-8-20 14:12 编辑


如此设置 findstr 的匹配参数,还为防止目标文件名出现 “e3 b4 a5.jpg” 的特殊情况...
  1. certutil -hashfile "1.jpg" md5 | findstr /rbc:"[0-9a-z][0-9a-z] "
复制代码
1

评分人数

TOP

返回列表