Board logo

标题: [代码合集] [已解决]批处理如何获取文件名的数字并重命名文件 [打印本页]

作者: w439617840    时间: 2009-8-7 23:13     标题: [已解决]批处理如何获取文件名的数字并重命名文件

我喜欢看柯南  经常下载  可是 下载下来的文件名都不一样  比如“红旅首发- www.hltm.net名侦探柯南543”  “神奇字幕组柯南541集”什么的     要统一改成  “名侦探柯南第x集”的形式   (即要获取文件名中的集数,并改成如下格式的名字:名侦探柯南第x集) 还有文件的后缀名不一  有RM  AVI RMVB什么的   还有不存在同一集的文件
最好能解释下  特别是 取文件名中数字的那段最好说下思路

[ 本帖最后由 w439617840 于 2009-8-8 11:42 编辑 ]
作者: batman    时间: 2009-8-8 00:06

&&先说下获取文件名数字部分的思路吧,如文件名为“红旅首发- www.hltm.net名侦探柯南543”,我们不妨这样来看文件名是由22个分隔符+543组成的,只要在for中将543前面的所有字符都做分隔符忽略掉是不是就可以获取到我们所想要的数字了。但问题是怎么确定哪些字符是分隔符?我们不妨再分析下,组成任意数字的是不是只有0-9的10个字符,于是我们通过变量替换将所有的数字替换掉,不就可以确定余下没有被替换的字符就是分隔符了。代码如下,请楼主自行备份文件后再测试:
  1. @echo off
  2. for /f "delims=" %%a in ('dir /s /a-d /b 文件存放目录全路径*柯南') do call :lp "%%a" %%~na %%~xa
  3. goto :eof
  4. :lp
  5. set "str=%2"
  6. for /l %%a in (0,1,9) do call,set "str=%%str:%%a=%%"
  7. for /f "delims=%str%" %%a in ("%2") do ren %1 名侦探柯南第%%a集%3
复制代码

注:如是放在当前目录下执行,可以省去文件存放目录全路径

[ 本帖最后由 batman 于 2009-8-8 00:18 编辑 ]
作者: w439617840    时间: 2009-8-8 09:38

我想问下call,set "str=%%str:%%a=%%" 什么意思  为什么要用call set ,set不行吗?  str=%%str:%%a=%%这句话太强大了   赞个  我现在才知道有这种用法  又学习了新知识了   这个用法叫什么?除了去掉一段文件名中的数字外还有什么其他用途吗?  还有关于分隔符的问题  如果数字后面还有文字的话 如“柯南集”就为分隔符 为什么还能取到集前面的数字  他应该是往后取才对的啊

[ 本帖最后由 w439617840 于 2009-8-8 09:43 编辑 ]
作者: yslyxqysl    时间: 2009-8-8 10:07

call set影响效率
作者: batman    时间: 2009-8-8 10:57

如问题得到了解决,请楼主自行在标题上标注[已解决]字样。
作者: batman    时间: 2009-8-8 10:59

原帖由 yslyxqysl 于 2009-8-8 10:07 发表
call set影响效率

说的正是,是应该开启变量延迟的,一时偷了点懒,呵呵。




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2