|
|
楼主 |
发表于 2024-10-11 20:12:20
|
显示全部楼层
回复 8# 77七
很强大了。还差一个文件大小的判断,即名字虽相似但这两文件大小不一致不需要操作。
还有,这个代码好像只能操作到子文件夹,首层文件夹文件没得操作,我新建了个子文件夹测试了,已经很好了,这是我没考虑的意外收获,大佬出品的更通用,慢慢学习。
这是再次用ai生成的,始终无法达到要求。供借鉴,
提问词:有一批文件,要删掉其中大小一样 且以 "("+ 数字 +")" 结尾的重复文件,批处理咋写。- @echo off
- setlocal enabledelayedexpansion
- rem 设置要处理的目录
- set "dir=C:\your_directory"
- rem 创建临时文件用于存储要保留的文件路径
- set "tempFile=temp.txt"
- rem 遍历目录下的所有文件
- for /r "%dir%" %%F in (*.*) do (
- set "fileName=%%~nF"
- set "fileSize=%%~zF"
- rem 判断文件名是否以“(数字)”结尾
- if "!fileName:~-2!"==")" (
- set "numStart=0"
- for /l %%i in (1,1,20) do (
- set "char=!fileName:~-%%i,1!"
- if "!char!" geq "0" if "!char!" leq "9" (
- set /a numStart=%%i
- ) else (
- goto endLoop
- )
- )
- :endLoop
- if "!fileName:~-numStart,1!"=="(" then (
- rem 查找是否有相同大小且相似文件名但不以“(数字)”结尾的文件
- set "baseFileName=!fileName:~0,-numStart)"
- for /r "%dir%" %%G in ("!baseFileName!*") do (
- if "%%~nG" neq "!fileName!" then (
- set "otherSize=%%~zG"
- if!fileSize! equ!otherSize! then (
- rem 将不以“(数字)”结尾的文件路径写入临时文件
- echo %%G>>"%tempFile%"
- goto :nextFile
- )
- )
- )
- )
- )
- :nextFile
- )
- rem 遍历临时文件,删除对应的重复文件
- for /f "delims=" %%A in ('type "%tempFile%"') do (
- for /r "%dir%" %%B in ("*(!fileName:~-2!)*") do (
- if "%%B" neq "%%A" then (
- del "%%B"
- )
- )
- )
- del "%tempFile%"
- echo Done.
- pause
复制代码 |
|