Board logo

标题: [文件操作] [已解决]批处理怎样根据文本内容批量更改文件名? [打印本页]

作者: liht1024    时间: 2011-11-17 10:55     标题: [已解决]批处理怎样根据文本内容批量更改文件名?

本帖最后由 liht1024 于 2011-11-21 11:17 编辑

问题实质上就是要根据文本内容批量替换文件名的某些字符。
有上百个文件(文件名没有规律),分别含有字符(这些字符的前后可能还有其它字符)如下:
111,111_1,1_222,222_r,i_333_r,333,444,444_f,121,121_f_1,112,r_112_i,233_k,233_h,......,
现在有一个文本文件,分为两列,第一列为现有文件名中含有的字符,第二列为要文件名中要添加的字符,如下:
111          ABC
222          CCC
333          ABA
444          ABC
121          CCC
112          DDD
233          ACD
......
求一批处理,将第二列的字符加到现有文件名字符前面,且用"_"隔开,结果如下:
ABC_111
CCC_222
ABA_333
ABC_444
CCC_121
DDD_112
ACD_233
......
谢谢!
作者: justdoit2003    时间: 2011-11-17 12:55

用excel打开该文本文件,上述内容在A、B两列,在C1格内填写公式:="ren "&A1&" "&B1&"_"&A1
朝下一拉公式,就得到:
  1. ren 111 ABC_111
  2. ren 222 CCC_222
  3. ren 333 ABA_333
  4. ren 444 ABC_444
  5. ren 121 CCC_121
  6. ren 112 DDD_112
  7. ren 233 ACD_233
复制代码
然后把C列的内容复制出来粘贴到记事本里,保存为bat文件就可以了。
注:对于这种一次性的工作,用excel配合工作最合适了。
作者: awk    时间: 2011-11-17 13:02

  1. @echo off
  2. for /f "tokens=1-2" %%a in (C:\test\list.txt) do (
  3.     ren "D:\test\%%a" "%%b_%%a"
  4. )
复制代码

作者: justdoit2003    时间: 2011-11-17 13:30

遇到高手了,学习学习
作者: liht1024    时间: 2011-11-17 15:20

高手们今天都休假去了?
作者: 545810831    时间: 2011-11-17 20:11

本帖最后由 545810831 于 2011-11-17 20:21 编辑
  1. @echo off
  2. for /f "tokens=1-2" %%i in (1.txt) do   (
  3. for /f "delims=" %%a in ('dir /b "*%%i*.*"') do  ren "%%a" "%%j_%%i%%~xa"
  4. )
  5. pause
复制代码

作者: awk    时间: 2011-11-17 20:41

回复 5# liht1024


3楼的代码不行吗?
作者: 545810831    时间: 2011-11-18 06:33

出问题了,如果目录内有文件夹,代码也会把符合条件的文件夹改名了,还不知如何解决?
作者: liht1024    时间: 2011-11-18 13:02

回复 3# awk


    这个代码只能适用于文件名只含那些字符的文件,如果文件名还有其它字符则不行。
作者: liht1024    时间: 2011-11-18 13:17

回复 6# 545810831


    如果同时存在111_1、111_2这样的文件,就不能改名了。
作者: CrLf    时间: 2011-11-18 13:30

回复 9# liht1024


    那是楼主没有事先说明背景环境,所以别人才无法给你量体裁衣。
    建议在顶楼更新一个文件列表作为参照,隐私部分可用其他字符替代,格式不变即可
作者: awk    时间: 2011-11-18 16:29

回复 10# liht1024


在这种情况下,你希望改成什么样子?
作者: 545810831    时间: 2011-11-20 06:32

改了一下代码,应该可以了吧
  1. @echo off
  2. for /f "tokens=1-2" %%i in (1.txt) do   (
  3. for /f "delims=" %%a in ('dir /a-d /b "*%%i*"') do  ren "%%a" "%%j_%%~nxa"
  4. )
  5. pause
复制代码

作者: liht1024    时间: 2011-11-21 11:16

回复 13# 545810831


    谢谢,问题已经解决,就是这样的。




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