![]() 核心会员
|
版本2.1, 修正for (*.mkv) 导致的奇怪问题。
::version 2.1 @echo off && setlocal enabledelayedexpansion for %%m in (*.mkv) do ( set file_l=%%m set file_ext=%%~xm for %%i in ("%%~nm") do set file_1=%%~ni call :make_target !file_1! echo start "" /b /i ren "!file_l!" "!file_target!" ) goto end :make_target for /f "eol=; tokens=1-4* delims=.-" %%a in ("%1") do set file_target=[%%d]%%e.%%b.%%a-%%c!file_ext! goto:eof :end endlocal && @echo on |
||
![]() We see what we want to see. We hear what we want to hear. We believe what we want to believe. |
![]() 热心会员
|
asap兄的思路非常棒,参考asap兄的思路,我也推出一个“简练版”:
代码:
@echo off for %%M in (*.mkv) do call:ren "%%M" "%%~nM" goto :eof :ren set letter1=%1 if "%letter1:~1,1%"=="[" goto :eof for /f "tokens=1-4* delims=-." %%A in ("%~n2") do echo ren %1 "[%%D]%%E.%%B.%%A-%%C%~x1" goto :eof 此帖于 2010-09-03 09:30:03 被 mouze 编辑. . |
||
![]() 核心会员
|
版本2.2, 实现首字母大写。
::version 2.2 @echo off && setlocal enabledelayedexpansion for %%m in (*.mkv) do ( set file_l=%%m set file_ext=%%~xm for %%i in ("%%~nm") do set file_1=%%~ni call :make_target !file_1! echo start "" /b /i ren "!file_l!" "!file_target!" ) goto end :make_target for /f "tokens=1-4* delims=.-" %%a in ("%1") do ( set sA=%%a set sB=%%b set sC=%%c set sE=.%%e call :UpperCase sA call :UpperCase sB call :ExtraCase sC call :CamelCase sE && set sE=!sE:~1! set file_target=[%%d]!sE!.!sB!.!sA!-!sC!!file_ext! ) goto:eof :UpperCase for %%j in ("a=A" "b=B" "c=C" "d=D" "e=E" "f=F" "g=G" "h=H" "i=I" "j=J" "k=K" "l=L" "m=M" "n=N" "o=O" "p=P" "q=Q" "r=R" "s=S" "t=T" "u=U" "v=V" "w=W" "x=X" "y=Y" "z=Z") do call set "%1=%%%1:%%~j%%" goto:eof :ExtraCase for %%j in ("halfcd=HalfCD") do call set "%1=%%%1:%%~j%%" goto:eof :CamelCase for %%j in (".a=.A" ".b=.B" ".c=.C" ".d=.D" ".e=.E" ".f=.F" ".g=.G" ".h=.H" ".i=.I" ".j=.J" ".k=.K" ".l=.L" ".m=.M" ".n=.N" ".o=.O" ".p=.P" ".q=.Q" ".r=.R" ".s=.S" ".t=.T" ".u=.U" ".v=.V" ".w=.W" ".x=.X" ".y=.Y" ".z=.Z") do call set "%1=%%%1:%%~j%%" goto:eof :end endlocal && @echo on 运行效果如下: 此帖于 2010-09-02 23:51:40 被 asap 编辑. . 原因: .q=.Q .y=.Y |
||
![]() 热心会员
|
不错不错!asap兄的方案完美了!批处理中转换大小写可真是体力活!
|
||
![]() 热心会员
|
:ExtraCase
for %%j in ("halfcd=HalfCD") do call set "%1=%%%1:%%~j%%" call set "%1=%%%1:%%~j%%" 也没懂.这是call什么呢? 打出来是挨个call set xx=xxx...call set是什么? ------------------------ 查了一下..call也起延时变量的作用... %% %% %1:%%~j !%1:%%~j! 是一个效果吧? 求解释.3Q 此帖于 2010-09-02 21:51:58 被 wgf4242 编辑. . |
||
![]() 核心会员
|
我通常的做法是用TC把文件名清单输出到TXT,用UE之类的软件处理后,再通过BAT完成处理。
原始一点,但是简单。 |
||
![]() 热心会员
|
asap兄的批处理实在是太牛了,让人佩服的五体投地,用批处理这么多年,也没有想到还有这么精妙的用法,平常学东西太不求甚解了,不过,确实是有点儿复杂,没点儿功夫,连看懂也不容易。
@wgf4242 将批处理中的@echo off语句去掉,然后加几个测试命令,运行一下批处理就知道效果了,如下: :: 1. 测试用批处理代码 set sC=halfcd2 call :ExtraCase sC echo sC=%sC% goto :eof :ExtraCase for %%j in ("halfcd=HalfCD") do call set "%1=%%%1:%%~j%%" goto:eof 运行结果: D:\TEMP>renamefile.cmd D:\TEMP>set sC=halfcd2 D:\TEMP>call :ExtraCase sC D:\TEMP>for %j in ("halfcd=HalfCD") do call set "sC=%sC:%~j%" D:\TEMP>call set "sC=%sC:halfcd=HalfCD%" D:\TEMP>goto:eof D:\TEMP>echo HalfCD2 HalfCD2 D:\TEMP>goto :eof 通过这个执行过程你就应该明白了,不过,我下次还是不能保证自己能够写出来这种有技巧的代码。 |
||
![]() 热心会员
|
|
||
![]() 高级会员
|
拜楼上几位批处理高人。
自己遇到这种情况估计跟21楼差不多,不过“用UE之类的软件处理”后的文本可以直接导入TC的批量重命名工具中,重命名后有异常还可以方便的撤销一下。这样可能稍微省点脑力,不过自动化程度要比批处理差远了。嗯,其实关键是根本写不出这样的批处理来,所以收藏有空学习一下。 另外,话说XP命令行自带的中文帮助有些让我看的一愣一愣的,不知道是谁给翻译的。。 |
||
![]() 关于笔记本机械硬盘数据恢复的求助帖,请您指点: https://bbs.et8.net/bbs/showthread.php?p=17310314#post17310314 |