标题: [其他] 求助批处理批量重命名(子目录下的*.jpg) [打印本页]
作者: Y_am 时间: 2024-6-26 19:32 标题: 求助批处理批量重命名(子目录下的*.jpg)
根目录下有多个子目录,每个子目录下都有一样的照片但不同名字的.jpg,想批处理找到这些JPG然后重命名为同一个名字,请问各位大佬如何实现
作者: 77七 时间: 2024-6-26 21:02
本帖最后由 77七 于 2024-6-26 21:03 编辑
- @echo off
- cd /d "%~dp0"
- for /r /d %%d in (*) do (
- set /a d+=1
- for %%a in ("%%d\*.jpg") do (
- for /f %%m in ('certutil -hashfile "%%a" MD5 ^| find /v ":"') do (
- set /a #%%m+=1
- set _"%%a"="md5:%%m"
- )
- )
- for /f "tokens=1-2 delims=#=" %%a in ('set #') do (
- setlocal enabledelayedexpansion
- if %%b neq !d! (
- endlocal
- set #%%a=
- for /f tokens^=2delims^=^" %%a in ('set _ ^|find "md5:%%a"') do (
- set _"%%a"=
- )
- ) else (
- endlocal
- )
- )
- )
- for /f tokens^=2delims^=^" %%a in ('2^>nul set _') do (
- rem "结果正确,删除echo 再次执行"
- echo ren "%%a" "newname.jpg"
- )
- pause
复制代码
作者: aloha20200628 时间: 2024-6-26 22:08
本帖最后由 aloha20200628 于 2024-6-28 10:17 编辑
回复 1# Y_am
以下代码存为test.bat运行,假设每个子目录中不存在多个异名的相同文件,否则更名会导致冲突...
调用powershell创建各子目录按文件大小排序的路径文件名列表(以便仅对文件大小相同区段进行比对),调用系统内置工具fc.exe完成文件比对...
- @echo off &setlocal enabledelayedexpansion
- pushd "%~1" &set "lastZ=0"
- (powershell "dir -file -filter *.jpg -r|select -pr length, fullname|sort -pr length|ft -auto")|more +3>0.tmp
- for /f "tokens=1* delims= " %%a in (0.tmp) do (
- set "ok=0" &if "%%a"=="!lastZ!" (
- fc /b "%%~fb" "!lastF!">nul 2>nul && (set "ok=1" &ren "%%~fb" "!lastnF!")
- )
- if !ok! equ 0 (set "lastF=%%~fb"&set "lastZ=%%a"&set "lastnF=%%~nxb")
- )
- del/q "0.tmp"&popd&endlocal&pause&exit/b
复制代码
作者: newswan 时间: 2024-6-27 22:14
本帖最后由 newswan 于 2024-6-27 23:20 编辑
重命名为同一个名字,这个新文件名是什么?- @echo off
- setlocal enabledelayedexpansion
-
- for /f "usebackq tokens=* delims=" %%a in (` dir /s /b "*.jpg" `) do (
- for /f "usebackq tokens=* delims=" %%b in (` certutil -hashfile "%%~a" MD5 ^| find /v ":" `) do (
- if defined _%%b_ (
- echo ren "%%~a" "!_%%b_!"
- ) else (
- set _%%b_=%%~na
- )
- )
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |