找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: 娃娃

[文件操作] [已解决]hash值查重并手动选择保留的文件

[复制链接]
 楼主| 发表于 2025-6-17 20:38:09 | 显示全部楼层
回复 13# aloha20200628


   嗯~ o(* ̄▽ ̄*)o谢谢@aloha20200628 君的建议。虽说是人心不足蛇吞象,也是真的发现CMD的强大。
 楼主| 发表于 2025-6-18 13:41:23 | 显示全部楼层
本帖最后由 娃娃 于 2025-6-18 16:15 编辑

回复 6# aloha20200628
更新
.cmd所在测试目录下存放多个文件夹,文件夹(不规范,可能还套文件夹,套文件夹内是否有文件等)内存放文件,总计文件数量: 33749
总计有3组6个重复(经校验SHA512及内容)文件,以下
……
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
……
跑完,没发现上述3组6个重复文件,现在猜想提示中未显示的部分或者与上述3组6个重复文件有关?


本帖最后由 娃娃 于 2025-6-18 14:37 编辑
@aloha20200628君,以下数据情况目测是:字节大小相同,hash值不同的文件。脚本“一视同仁”地给出了选项。
@aloha20200628君帮忙看看是否可以优化成:让脚本略过字节大小相同,hash值不同的文件,即不重复的文件只显示hash值相同的重复文件供选择保留。

以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?Q
以上列表中请指定一个要保留的文件序号,q=退出 [Q]?
……
 楼主| 发表于 2025-6-18 14:07:46 | 显示全部楼层
回复 14# 77七

Environment variable # not defined

以上相同文件,存在于【非意向保留目录】内,输入数字保留(#=之间的数字) 或 输入数字+s(如1s,保留并设为意向保留目录):
输入错误,重新输入:

@77七君,出现以上情况的原因目测是:字节大小相同,hash值不同的文件。脚本应该是没有预设跳略处理机制,也没有给出应对选项,导致卡住没法继续下一步。
@77七君得闲帮忙看看怎么进一步优化一下子。
发表于 2025-6-18 16:22:52 | 显示全部楼层
回复 18# 娃娃


   
sort 对utf-8不友好,脚本编码存为 ansi。
 楼主| 发表于 2025-6-18 16:43:33 | 显示全部楼层
回复 19# 77七


   这边另存为ANSI执行,相同问题还是存在。
发表于 2025-6-18 17:47:08 | 显示全部楼层
回复 20# 娃娃


   请把导致报错的文件上传到网盘。
发表于 2025-6-18 19:05:21 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-6-18 19:08 编辑

回复 17# 娃娃

如果用一个文件总数量少于1000的目录树试运行后没问题,即可说明是批处采用的内部变量个数超限了,如你所示的 33749 个文件总量已经远超内限的 8K 个内部变量了...
 楼主| 发表于 2025-6-18 21:02:09 | 显示全部楼层
回复 21# 77七

容许按照22#@aloha20200628君的说明测试后再回来一并反馈。
之前样本测试是在100个文件以内,不过现在心内差不多是相信了@aloha20200628君的说明了。
不好意思!先离开。
发表于 2025-6-18 22:03:17 | 显示全部楼层
回复 23# 娃娃


   两者的代码不同,报错不同,为什么混为一谈呢?
发表于 2025-6-18 23:07:41 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-6-19 20:33 编辑

回复 23# 娃娃

若可以确认是文件个数太多导致批处脚本变量用量超限,试试以下的 bat+jscript 代码(基于6楼代码改写,存为 test.bat 或 test.cmd 运行),其中批处变量超限的部分交付 jscript 处理,其处理结果再由批处接续完成(已经实测了包含 2-4 万之多文件数量的目录树,均已顺利通过)。代码中第3行预设当前目录及其子目录下的被处理文件类型为  *.txt *.bat 楼主可自行增减 ...

  1. 2>1/* ::
  2. @echo off &setlocal &echo,正在查找当前目录及其各子目录中的重复文件,如未发现则自动退出...
  3. dir /s/b/a-d *.txt *.bat>"#.#" &cscript /nologo /e:jscript "%~f0" "%cd%\#.#">"$.$"
  4. setlocal enabledelayedexpansion &set "k=-1"
  5. for /f "delims=" %%a in ($.$) do (
  6.   if "%%~a"=="*" (set/a "k*=-1")
  7.   if !k! equ 1 (
  8.     for /f "delims=" %%h in ('certutil -hashfile "%%~fa" sha256^|find /v ":" ') do (set "h=%%h" &set "h=!h: =!")
  9.     for %%h in (!h!) do if not defined _h%%h (set "_h%%h="%%~fa"") else (set "_h%%h=!_h%%h!,,,"%%~fa"") )
  10.   if !k! equ -1 (
  11.     set "n=0" &for /f "tokens=1* delims==" %%f in ('set _h^|find ",,,"') do for %%x in (%%g) do (
  12.       set/a "n+=1" &set "_f!n!=%%~fx" &echo,!n!》%%~tx %%~fx)
  13.     if !n! gtr 0 (
  14.       set "_n=" &for /l %%n in (1,1,!n!) do set "_n=!_n!%%n"
  15.       set/a "_q=n+1" &choice /c !_n!q /m "以上列表中请指定一个要保留的文件序号,q=退出"
  16.       set "v=!errorlevel!" &if !v! neq !_q! for /l %%n in (1,1,!n!) do if %%n neq !v! (del /q "!_f%%n!") )
  17.     set/a "k*=-1" &for /f "delims==" %%v in ('set _h') do set "%%v=" )
  18. ) 2>nul
  19. del /q "#.#" "$.$" 2>nul &exit/b */
  20. v=WSH.arguments, fso=WSH.createObject('Scripting.FileSystemObject');
  21. df={}, fp=fso.opentextfile(v(0),1);
  22. while (!fp.AtEndofStream) {
  23.    f=fp.readline(), f=f.replace('\r\n','');
  24.    if (!f || f.indexOf('?') != -1) continue; else z=fso.GetFile(f).size;
  25.    if (df[z]) df[z]+='>"'+f+'"'; else df[z]='"'+f+'"'; }
  26. for (k in df)
  27.    if (df[k].indexOf('>') != -1)
  28.      WSH.echo('*\r\n'+df[k].replace(/>/g, '\r\n'))
  29. WSH.echo('*'), WSH.quit();
复制代码

评分

参与人数 1技术 +1 收起 理由
娃娃 + 1 謝謝費心!

查看全部评分

发表于 2025-6-19 10:59:27 | 显示全部楼层
本帖最后由 77七 于 2025-6-19 11:23 编辑

单独发了一贴,[分享]批处理md5去重,手动选择保留文件及设定意向保留目录 ,由14楼修改,提高兼容性,优化使用体验。

另外建议楼主,精简下1楼,只需几行文字留下本质的问题即可,减少使用引用。
发表于 2025-6-19 15:32:29 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-6-19 20:28 编辑

回复 23# 娃娃

对25楼 bat+jscript 代码作了进一步订正,又练了一版 bat+powershell(如下代码),两个版本实测了几个样本,约上千个子目录共约 2-4 万之多的文件数量,均可顺利通过。以下代码存为 test.bat 或 test.cmd 运行, 代码中第21行预设当前目录及其子目录下的被处理文件类型为  *.txt, *.bat 楼主可自行增减。bat+jscript 版本的启速要比 bat+powershell 版本快,楼主自行测试比较选择吧 ...

  1. <# ::
  2. @echo off &setlocal &echo,...正在查找当前目录及其各子目录中的重复文件,如未发现则自动退出...
  3. powershell -c "iex(${%~f0}|out-string)">"$.$"
  4. setlocal enabledelayedexpansion &set "k=-1"
  5. for /f "delims=" %%a in ($.$) do (
  6.   if "%%~a"=="*" (set/a "k*=-1")
  7.   if !k! equ 1 (
  8.     for /f "delims=" %%h in ('certutil -hashfile "%%~fa" sha256^|find /v ":" ') do (set "h=%%h" &set "h=!h: =!")
  9.     for %%h in (!h!) do if not defined _h%%h (set "_h%%h="%%~fa"") else (set "_h%%h=!_h%%h!,,,"%%~fa"") )
  10.   if !k! equ -1 (
  11.      set "n=0" &for /f "tokens=1* delims==" %%f in ('set _h^|find ",,,"') do for %%x in (%%g) do (
  12.         set/a "n+=1" &set "_f!n!=%%~fx" &echo,!n!》%%~tx %%~fx)
  13.      if !n! gtr 0 (
  14.         set "_n=" &for /l %%n in (1,1,!n!) do set "_n=!_n!%%n"
  15.         set/a "_q=n+1" &choice /c !_n!q /m "以上列表中请指定一个要保留的文件序号,q=退出"
  16.         set "v=!errorlevel!" &if !v! neq !_q! for /l %%n in (1,1,!n!) do if %%n neq !v! (del /q "!_f%%n!") )
  17.      set/a "k*=-1" &for /f "delims==" %%v in ('set _h') do set "%%v=" )
  18. ) 2>nul
  19. del /q "$.$" 2>nul &exit/b
  20. #>
  21. $a=@{}; dir -file *.txt, *.bat -r | %{if($a[$_.length]){$a[$_.length]+='*"'+$_.fullname+'"'}else{$a[$_.length]='"'+$_.fullname+'"'}}
  22. foreach($v in $a.values){if($v.contains('*')){"*`r`n"+$v.replace('*',"`r`n")}}; '*'; exit
复制代码

评分

参与人数 1技术 +1 收起 理由
娃娃 + 1 乐于助人

查看全部评分

 楼主| 发表于 2025-7-1 21:01:59 | 显示全部楼层
回复  娃娃

如果用一个文件总数量少于1000的目录树试运行后没问题,即可说明是批处采用的内部变量个数超 ...
aloha20200628 发表于 2025-6-18 19:05


確實是文件數量太多的問題
 楼主| 发表于 2025-7-1 21:05:02 | 显示全部楼层
回复  娃娃


   两者的代码不同,报错不同,为什么混为一谈呢?
77七 发表于 2025-6-18 22:03



   當時在文件數量不多的情況下正常,一多就出狀況。所以&#8943;&#8943;
 楼主| 发表于 2025-7-1 21:22:18 | 显示全部楼层
回复 25# aloha20200628


   雖然手邊目前暫時是沒有大批量文件處理測試。但hash去重這個問題會持久長期關注。謝謝!之前閉門造車出現誤刪系統文件的狀況,後來老老實實一個個整理,好不辛苦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 07:05 , Processed in 0.032199 second(s), 12 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表