找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23387|回复: 5

[代码合集] [已解决]批处理如何获取文件名的数字并重命名文件

[复制链接]
发表于 2009-8-7 23:13:06 | 显示全部楼层 |阅读模式
我喜欢看柯南  经常下载  可是 下载下来的文件名都不一样  比如“红旅首发- www.hltm.net名侦探柯南543”  “神奇字幕组柯南541集”什么的     要统一改成  “名侦探柯南第x集”的形式   (即要获取文件名中的集数,并改成如下格式的名字:名侦探柯南第x集) 还有文件的后缀名不一  有RM  AVI RMVB什么的   还有不存在同一集的文件
最好能解释下  特别是 取文件名中数字的那段最好说下思路

[ 本帖最后由 w439617840 于 2009-8-8 11:42 编辑 ]

评分

参与人数 1PB +2 收起 理由
batman + 2 感谢主动给标题标注[已解决]字样

查看全部评分

发表于 2009-8-8 00:06:34 | 显示全部楼层
&&先说下获取文件名数字部分的思路吧,如文件名为“红旅首发- 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 编辑 ]
 楼主| 发表于 2009-8-8 09:38:12 | 显示全部楼层
我想问下call,set "str=%%str:%%a=%%" 什么意思  为什么要用call set ,set不行吗?  str=%%str:%%a=%%这句话太强大了   赞个  我现在才知道有这种用法  又学习了新知识了   这个用法叫什么?除了去掉一段文件名中的数字外还有什么其他用途吗?  还有关于分隔符的问题  如果数字后面还有文字的话 如“柯南集”就为分隔符 为什么还能取到集前面的数字  他应该是往后取才对的啊

[ 本帖最后由 w439617840 于 2009-8-8 09:43 编辑 ]
发表于 2009-8-8 10:07:30 | 显示全部楼层
call set影响效率
发表于 2009-8-8 10:57:37 | 显示全部楼层
如问题得到了解决,请楼主自行在标题上标注[已解决]字样。
发表于 2009-8-8 10:59:01 | 显示全部楼层
原帖由 yslyxqysl 于 2009-8-8 10:07 发表
call set影响效率

说的正是,是应该开启变量延迟的,一时偷了点懒,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 03:37 , Processed in 0.012479 second(s), 10 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表