|
|
发表于 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 楼主可自行增减 ...
- 2>1/* ::
- @echo off &setlocal &echo,正在查找当前目录及其各子目录中的重复文件,如未发现则自动退出...
- dir /s/b/a-d *.txt *.bat>"#.#" &cscript /nologo /e:jscript "%~f0" "%cd%\#.#">"$.$"
- setlocal enabledelayedexpansion &set "k=-1"
- for /f "delims=" %%a in ($.$) do (
- if "%%~a"=="*" (set/a "k*=-1")
- if !k! equ 1 (
- for /f "delims=" %%h in ('certutil -hashfile "%%~fa" sha256^|find /v ":" ') do (set "h=%%h" &set "h=!h: =!")
- for %%h in (!h!) do if not defined _h%%h (set "_h%%h="%%~fa"") else (set "_h%%h=!_h%%h!,,,"%%~fa"") )
- if !k! equ -1 (
- set "n=0" &for /f "tokens=1* delims==" %%f in ('set _h^|find ",,,"') do for %%x in (%%g) do (
- set/a "n+=1" &set "_f!n!=%%~fx" &echo,!n!》%%~tx %%~fx)
- if !n! gtr 0 (
- set "_n=" &for /l %%n in (1,1,!n!) do set "_n=!_n!%%n"
- set/a "_q=n+1" &choice /c !_n!q /m "以上列表中请指定一个要保留的文件序号,q=退出"
- set "v=!errorlevel!" &if !v! neq !_q! for /l %%n in (1,1,!n!) do if %%n neq !v! (del /q "!_f%%n!") )
- set/a "k*=-1" &for /f "delims==" %%v in ('set _h') do set "%%v=" )
- ) 2>nul
- del /q "#.#" "$.$" 2>nul &exit/b */
- v=WSH.arguments, fso=WSH.createObject('Scripting.FileSystemObject');
- df={}, fp=fso.opentextfile(v(0),1);
- while (!fp.AtEndofStream) {
- f=fp.readline(), f=f.replace('\r\n','');
- if (!f || f.indexOf('?') != -1) continue; else z=fso.GetFile(f).size;
- if (df[z]) df[z]+='>"'+f+'"'; else df[z]='"'+f+'"'; }
- for (k in df)
- if (df[k].indexOf('>') != -1)
- WSH.echo('*\r\n'+df[k].replace(/>/g, '\r\n'))
- WSH.echo('*'), WSH.quit();
复制代码 |
评分
-
查看全部评分
|