bat批处理语句,把多个文件夹里面的文件按名称排序后,以文件夹名为基础,递增命名

文件夹名类似这样:P002-0001,P004-0041....P100-1961文件夹里按名称排序,第一个文件名字改为文件夹名,之后的文件名每个按顺序递增1如P004-... 文件夹名类似这样:P002-0001,P004-0041....P100-1961

文件夹里按名称排序,第一个文件名字改为文件夹名,之后的文件名每个按顺序递增1
如P004-0041文件夹里面,文件依次改名为P004-0041,P004-0042,P004-0043,P004-0044,P004-0045.......
展开
 我来答
朴素且可爱灬小喵1
2015-08-31 · TA获得超过2902个赞
知道大有可为答主
回答量:1713
采纳率:89%
帮助的人:523万
展开全部
您这个需求真复杂,按照做工程的方式实现了,能否多给点分啊?(呵,开玩笑的)
把下面的代码存为my_dir_ren.bat,放在这些文件夹所在的文件夹里,运行就可以了。我已经在Win7下测试通过了。
@echo off
@setlocal enabledelayedexpansion
@for /f "delims=" %%i in ('dir /b /ad') do (

@cd %%i
@call :substr_before_char - %%i dir1
@call :substr_after_char - %%i dir2
@call :clr_bgn0s !dir2! n
@echo !dir1! !dir2! !n!
@for /f "delims=" %%j in ('dir /b /on') do (
@set rn=0000!n!
@set rn=!rn:~-4!
@echo !rn!
@ren "%%j" "!dir1!-!rn!.txt"
@set /a n=n+1
)
@cd..
)
@goto End0

:clr_bgn0s
@setlocal
@set str=%1

:Rep1
@set fc=%str:~0,1%
@if %fc%==0 (
@set str=%str:~1%
@goto Rep1
)
:Rtn1
@endlocal& set "%~2=%str%"
@goto :eof

:substr_after_char
@setlocal
@set c=%1

@set str=%2
@set tmp_str=%str%
:Rep2
@set get_c=%tmp_str:~0,1%
@if %get_c%==%c% (
@set tmp_str=%tmp_str:~1%
@goto Rtn2
)
@set tmp_str=%tmp_str:~1%
@if "%tmp_str%"=="" (
@goto Rtn2
) else (
@goto Rep2
)
:Rtn2
@set str=%tmp_str%
@endlocal& set "%~3=%str%"
@goto :eof

:substr_before_char
@setlocal
@set c=%1

@set str=%2
@set tmp_str=%str%
:Rep3
@set get_c=%tmp_str:~-1%
@if %get_c%==%c% (
@set tmp_str=%tmp_str:~0,-1%
@goto Rtn3
)
@set tmp_str=%tmp_str:~0,-1%
@if "%tmp_str%"=="" (
@set tmp_str=%str%
@goto Rtn3
) else (
@goto Rep3
)
:Rtn3
@set str=%tmp_str%
@endlocal& set "%~3=%str%"
@goto :eof

:End0
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式