批处理命令修改多级文件夹内图片的名字

来源:百度知道 编辑:UC知道 时间:2024/09/22 21:28:25
多级文件夹:2009/1/aaa/nEO_IMG_机油.jpg,2009/1/aaa/nEO_IMG_滤清器.jpg等等

在2009目录下还有很多2.3.4...100子目录,每个子目录下还有aaa.bbb.ccc...zzz
的子目录,每个子目录下还有多张文件名开头带有“nEO_IMG_”的图片
以上为例,我想将最终目录中的多张图片文件名开头带有“nEO_IMG_”改为“aaa机油.jpg,aaa滤清器.jpg”,不带的图片不需改,就是把图片文件名中的“nEO_IMG_”取代为为上一级目录的文件夹名字
麻烦高手指教!!!谢谢
liuzhaonan11,您好
我执行了以后显示找不到文件,实在对不起,我要更正一下:是2009/***/***/***/nEO_IMG_***.jpg,2009/***/***/***/nEO_IMG_***.jpg,中间少写了一级目录,我想解释一下,我的2009下的三级目录和子目录文件名都是没有规则的不同的,上面的文件名我只不过是打个比方,而且机油和滤清器也是打比方的,真正的不是这个,还有就是这个批处理文件放在和2009同一个文件夹中吗?
劳您费心了!
第二位批处理后,其中目录中一小部分产品没有修改,我也觉得很奇怪,但是我把其中没有修改的图片产品文件换到上一级的目录或其他目录中,再重新执行一下,有时会成功(仅仅是有时,我也不知道是哪一级的目录),那我感觉不是这些产品的文件名有问题,我也和fastslz作者沟通了很长时间,但是还是很感谢,我已经加到最高分了,希望有高手再帮帮忙!!!

我改一下.
那就放在2009里面好了.

@echo off
for /f "delims=" %%h in ('dir /a:d /b ".\"') do (
for /f "delims=" %%i in ('dir /a:d /b ".\%%h\"') do (
for /f "delims=" %%j in ('dir /a:d /b ".\%%h\%%i\"') do (
for /f "tokens=2* delims=_" %%k in ('dir /a:-d /b ".\%%h\%%i\%%j\nEO_IMG_*.jpg"') do (
ren ".\%%h\%%i\%%j\nEO_IMG_%%l" "%%j%%l"
)
)
)
)
pause
exit /b 0

再给你看了一下唯一可能是文件夹里的jpg文件是只读属性,修改了一下代码自己测试

@echo off
for /f "delims=" %%i in ('dir /a-d/b/s "2009\nEO_IMG_*.jpg"') do call :slz "%%~dpi" "%%i"
pause
exit

:slz
set "NewName=%~nx2"
set "Fname=%~1"
set "Fname=%Fname:~0,-1%.tmp"
for /f &q