![]() 超级会员
|
原始文件名:
代码:
xtm.dvd-halfcd2.第36个故事.taipei.exchanges.2010.中国台湾.mkv 代码:
[第36个故事]Taipei.Exchanges.2010.DVD.XTM-HalfCD2.mkv |
||
![]() 坚持失去了意义,是消失的时候了。 |
![]() 热心会员
|
代码:
ren "xtm.dvd-halfcd2.第36个故事.taipei.exchanges.2010.中国台湾.mkv" "[第36个故事]Taipei.Exchanges.2010.DVD.XTM-HalfCD2.mkv" 不过,你的要求太复杂了,基本上没有什么规律可言,你以为批处理和正规是高级编程语言啊,控制的粒度没有这么精细啦。 另外,不要只给一个例子,多给几个,要用程序处理,一定要有通用的规律。 初步的设想是用for /f将原文件名按.或-作分隔符分成若干字段,然后再取相应字段重新组合成新文件名,但字母大小写恐怕就无法照顾了。 |
||
![]() 核心会员
|
正则可以做到调整字母顺序,但是字首大写难了点儿
|
||
![]() 浮生恰似冰底水 日夜东流人不知 |
![]() 热心会员
|
完全同意2楼见解!关注一下最后怎样解决。
|
||
![]() 超级会员
|
引用:
再给几个例子。 再给几个: 代码:
xtm.dvd-halfcd2.我的美女老板.my.belle.boss.2010.中国香港.mkv xtm.dvd-halfcd2.拳霸3.ong.bak.3.2010.泰国-logo.mkv xtm.bd720p-halfcd2.波斯王子:时之刃.prince.of.persia.the.sands.of.time.2010.美国.mkv 代码:
[我的美女老板]My.Belle.Boss.2010.DVD.XTM-HalfCD2.mkv [拳霸3]Ong.Bak.3.2010.DVD.XTM-HalfCD2.mkv [波斯王子:时之刃]Rrince.Of.Persia.The.Sands.Of.Time.2010.BD720P.XTM-HalfCD2.mkv 请正则高手研究研究,谢!! ![]() |
|||
![]() 高级会员
|
不要求大小写的情况,UltraEdit, perl正则。。
查找: 代码:
xtm\.(\w+)-halfcd2\.(.*?)\.(.*)(\d{4})\.(.*?)\.mkv 代码:
[\2]\3\4.\1.XTM-HalfCD2.mkv |
||
![]() 关于笔记本机械硬盘数据恢复的求助帖,请您指点: https://bbs.et8.net/bbs/showthread.php?p=17310314#post17310314 |
![]() 热心会员
|
|
||
![]() 终极会员
|
恩,写了个小程序,专门处理这个。放在文件目录下执行即可。
处理的文件会有日志提示。只处理当前目录下非[开头的.mkv文件。 XP SP3用附件里的文件测试过无问题,不保证在你的机器上能正常工作。 |
||
![]() 宝贝宝贝笑一笑 笑容其实很美妙 只要天天没烦恼 其他一切不重要 |
![]() 核心会员
|
写了一个批处理的方案。这个用不到正则,可以绕过去。
@echo off & setlocal enabledelayedexpansion for %%m in (*.mkv) do ( set file_l=%%m set file_s=%%~sm set file_ext=%%~xm for %%i in ("%%~nm") do set file_1=%%~ni call :make_target !file_1! echo ren "!file_l!" "!file_target!" ) goto end :make_target for /f "tokens=1-3* delims=." %%a in ("%1") do set file_target=[%%c]%%d.%%b!!file_ext! goto:eof :end endlocal & @echo on 说明: 1. 请备份并先测试再运行! 2. 将上面的代码保存成.bat文件,然后再目标文件目录下运行;目前只考虑对.mkv文件处理。根据需要可考虑修改上面白色部分。 3. 将红色的echo注释掉,就可以运行了。在中文Win下拿楼主给的几个例子,测试通过。 4. 首字母没有考虑大写的情况,如果需要,添加一个函数即可。 5. 没有考虑异常处理;文件名中若包含特殊字符,怕有问题,先将就一下吧。 good luck~ 此帖于 2010-09-02 01:41:46 被 asap 编辑. . 原因: 添加file_ext |
||
![]() We see what we want to see. We hear what we want to hear. We believe what we want to believe. |
![]() 热心会员
|
楼上的批处理写得确实很高明,高手,佩服!
不过需要将红色echo那一行改成: echo ren "!file_l!" "!file_target!%%~xm" 此帖于 2010-09-01 16:45:05 被 hnlyzhd 编辑. . |
||
![]() 热心会员
|
由于楼主的文件命名都有相同的规律,所以批处理还是可以完成的,如下:
代码:
@echo off for %%M in (*.mkv) do ( for /f "tokens=1-3* delims=." %%A in ("%%~nM") do call:ren "%%M" "%%A" "%%B" "%%C" "%%D" ) goto :eof :ren set letter1=%1 if "%letter1:~1,1%"=="[" goto :eof set part1=%4 set part1="[%part1:~1,-1%]" set part2="%~n5" set part4=%2 for /f "tokens=1,2 delims=-" %%I in (%3) do ( set part3="%%I" set part4="%part4:~1,-1%-%%J" ) echo ren %1 "%part1:~1,-1%%part2:~1,-1%.%part3:~1,-1%.%part4:~1,-1%%~x1" goto :eof 之所以代码中有这么多双引号,是希望碰到特殊字符时尽量不出错。 另外,9楼的方案没有改名成“......DVD.XTM-HalfCD2.mkv”这个样子,而是“......dvd-halfcd2”这样,“xtm”丢失。 此帖于 2010-09-01 17:07:54 被 mouze 编辑. . |
||
![]() 热心会员
|
%%xx的参数不熟啊...借此跟楼上几位学习....
|
||
![]() 核心会员
|
用工具软件吧。
不行的话可以分几步。 我用Flexible Renamer |
||
![]() 核心会员
|
|
||
![]() 核心会员
|
刚才又看了看楼主的要求,发现还是需要XTM字样的,所以再次修改代码,为保存记录完整,之前的代码就称ver 1.0, 下面的版本ver 2.0
rem version 2.0 @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 ren "!file_l!" "!file_target!" ) goto end :make_target for /f "tokens=1-4* delims=.-" %%a in ("%1") do set file_target=[%%d]%%e.%%b.%%a-%%c!file_ext! goto:eof :end endlocal && @echo on 注意: 1. 还是请先备份并测试再运行。 2. 在某些情况和系统里面,最后一个文件,会被ren 两次,结果导致文件名称有误。这个bug,目前不清楚原因所在,可能是批处理for的问题;建议move或copy到一个新的目录下,这样就没有这个问题了。相应的代码如下:。 代码:
echo move "!file_l!" "c:\temp\!file_target!" good luck~ |
||