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

[文本处理] [已解决]批处理怎样保留文件名中指定字段,其它删除?

[复制链接]
发表于 2010-12-27 13:46:01 | 显示全部楼层 |阅读模式
我有N个文件,只写三个文件名称如下:
62KZ2_152KZ2_START_GCJZG1_BBB_650K_123X456_FONT_KEY_UP_V1000_101223.txt
62KZ2_152KZ2_START_GCJZG2_BBB_650K_123X456_FONT_KEY_UP_V1000_101223.txt
62KZ2_152KZ2_START_GCJZG3_BBB_650K_123X456_FONT_KEY_UP_V1000_101223.txt
62KZ2_152KZ2_START_GCJZG4_CCC_650K_789X123_FONT_KEY_UP_V1000_101223.txt
62KZ2_152KZ2_START_GCJZG5_CCC_650K_789X123_FONT_KEY_UP_V1000_101223.txt
62KZ2_152KZ2_START_GCJZG6_CCC_650K_789X123_FONT_KEY_UP_V1000_101223.txt
我想只保留这三个文件名称中的“GCJZG、GCJZG1、GCJZG2...”这个字段
我自己写了一个,可能有一点问题,请大侠位指点我走上正途:
  1. @echo off
  2. rem 关闭回显
  3. setlocal enabledelayedexpansion
  4. rem 启动变量延迟
  5. for /f "tokens=* delims=" %%i in ('dir /a-d /b *.txt') do (
  6. set old_name=%%i
  7. rem 保存一下原始文件名
  8. set new_name=!old_name:*_START_=!
  9. rem 将原文件名中的“*_START_”替换为空
  10. ren !old_name! !new_name!
  11. rem 将得到的替换后的作为新名称
  12. )
  13. setlocal enabledelayedexpansion
  14. rem 启动变量延迟
  15. for /f "tokens=* delims=" %%i in ('dir /a-d /b *.txt') do (
  16. set old_name=%%i
  17. rem 保存一下原始文件名
  18. set new_name=!old_name:_*=.txt!
  19. rem 将原文件名中的“_*.txt”替换为“.txt”
  20. ren !old_name! !new_name!
  21. rem 将得到的替换后的作为新名称
  22. )
  23. rem pause
复制代码

注:我是新手,请大侠指点.

[ 本帖最后由 testsoft 于 2010-12-29 12:44 编辑 ]

评分

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

查看全部评分

发表于 2010-12-27 14:26:16 | 显示全部楼层
如果目录下只有需要改名的文件
  1. @echo off
  2. for /f "tokens=1-3,4* delims=_" %%a in ('dir /b/a-d *.txt') do ren "%%a_%%b_%%c_%%d_%%e" "%%d.txt"
复制代码
有关 for 的使用,参考这里 http://bbs.bathome.net/thread-2189-1-1.html

[ 本帖最后由 hanyeguxing 于 2010-12-27 14:46 编辑 ]

评分

参与人数 1技术 +1 收起 理由
testsoft + 1 乐于助人

查看全部评分

发表于 2010-12-27 15:06:15 | 显示全部楼层

[code]


  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd E:\1
  4. set a=GCJZG
  5. set /a b=0
  6. :c
  7. set /a b+=1
  8. ren *!a!*.txt !a!!b!.txt
  9. if exist !a!!b!.txt goto c
  10. pause

  11. ::可能会出现文件已存在或什么的,如果出现关掉本窗口就行了,手机再写代码的话很麻烦……xP sp3下测试通过…
复制代码

[ 本帖最后由 ithinkican 于 2010-12-27 16:49 编辑 ]

评分

参与人数 1技术 +1 收起 理由
testsoft + 1 乐于助人

查看全部评分

 楼主| 发表于 2010-12-27 21:50:42 | 显示全部楼层

回复 2楼 的帖子

感谢大侠给了我一个思路,我本意是取那个字段做名称,但那个字段并不是有规律的,三楼的大侠也能实现,但有局限性,不过还是非常感谢。。。
 楼主| 发表于 2010-12-27 21:54:48 | 显示全部楼层

这个是我现在用来实现两个修改的代码

以下是我需要的最终功能实现:大侠们看还有问题吗?
  1. @echo off
  2. Setlocal enabledelayedexpansion
  3. set f="F:\1"
  4. @echo 输入[0]去前缀[1]名称改短
  5. set /p a=[0/1]:
  6. if !a!==0 call :0
  7. if !a!==1 call :1
  8. if !a! gtr 1 goto end
  9. goto end
  10. :0
  11. for /f "tokens=* delims=" %%i in ('dir /a-d /b *.txt') do (
  12. set old_name=%%i
  13. set new_name=!old_name:*_START=START!
  14. ren !old_name! !new_name!
  15. )
  16. exit
  17. :1
  18. setlocal enabledelayedexpansion
  19. for /f "tokens=* delims=" %%i in ('dir /a-d /b *.txt') do (
  20. set old_name=%%i
  21. set new_name=!old_name:*_START=START!
  22. ren !old_name! !new_name!
  23. )
  24. for /f "tokens=1,2* delims=_" %%a in ('dir /b/a-d *.txt') do ren "%%a_%%b_%%c" "%%b.txt"
  25. pause
复制代码

[ 本帖最后由 testsoft 于 2010-12-29 12:44 编辑 ]

评分

参与人数 1PB -2 收起 理由
Batcher -2 请编辑自己的帖子,把代码放到code标签里面 ...

查看全部评分

发表于 2010-12-28 01:23:56 | 显示全部楼层

不了解楼主想要的什么意思…

如果仅符合题目,那么本人的代码已经实现了…
如果还有其它代码要求、请讲出来、以便我们修改…
 楼主| 发表于 2010-12-28 12:42:38 | 显示全部楼层

回复 6楼 的帖子

是的,你的确实能实现我说的功能,今天好像只能给一次分,明天我再给分吧,不好意思哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 01:33 , Processed in 0.026970 second(s), 11 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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