[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 【已解决】批处理根据文本中的文件名及对应的后缀字符串对文件重命名

折腾了许久,还是没能成功,在此求助大神,已在论坛搜索了同类帖子,http://www.bathome.net/thread-15815-1-1.html,很雷同,也是通过txt中提取空格或者直接由xls文件copy过来的分隔符前面的内容来判断需要改名的文件名中存在与否,存在则进行组合修改重命名该文件,否则则不修改。
唯一区别就是重命名的名字是:【前者和后者的组合】,如:
         Names.txt文档信息:
C01-2016-JX1412-1.0001_001.jpg 20121000362裴宏业
C01-2016-JX1412-1.0001_002.jpg 20121000758赵佳伟
C01-2016-JX1412-1.0001_003.jpg 20121000761刘晨
C01-2016-JX1412-1.0001_004-1.jpg 20121000901毛茅弋
.........
重命名后为:(目的1)
C01-2016-JX1412-1.0001_001_20121000362裴宏业.jpg
C01-2016-JX1412-1.0001_002_20121000758赵佳伟.jpg
C01-2016-JX1412-1.0001_003_20121000761刘晨.jpg
C01-2016-JX1412-1.0001_004-1_20121000901毛茅弋.jpg
这里相当于在原文件名后面添加
或者:(目的2)
C01-2016-JX1412-1.0001_20121000362裴宏业.jpg
C01-2016-JX1412-1.0001_20121000758赵佳伟.jpg
C01-2016-JX1412-1.0001_20121000761刘晨.jpg
C01-2016-JX1412-1.0001_20121000901毛茅弋.jpg
这里相当于把原文件名"_"下划线后的部分替换为后面的部分

原贴里的语句:
  1. @echo off
  2. for /f "tokens=1*" %%i in (a.txt) do ren "%%i" "%%j%%~xi"
  3. pause
复制代码
  1. @echo off
  2. for /r "d:\abc" %%a in (*.pdf) do (
  3.    for /f "tokens=1,2 delims= " %%b in (a.txt) do (
  4.    if "%%~nxa"=="%%b" ren "%%a" "%%c.pdf"
  5.    )
  6. )
复制代码
使用后发现,不能保留原文件名,自己修改后,又把原文件名后缀一起带入到了新文件名中,如:
C01-2016-JX1412-1.0001_001.jpg_20121000362裴宏业.jpg
C01-2016-JX1412-1.0001_002.jpg_20121000758赵佳伟.jpg
C01-2016-JX1412-1.0001_003.jpg_20121000761刘晨.jpg
C01-2016-JX1412-1.0001_004-1.jpg_20121000901毛茅弋.jpg
从而达不到前面我的要求。

请大神抽空帮我(新手)修改一下。当前文件及子文件的文件一并处理。

谢谢!(尽管也可以利用原贴通过在xls文件多次修改来达到目的,但还是希望批处理能直接解决来得快)
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

试试这个 随便改了一下  其实会for 加其它几个命令就行了
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%a in ('dir /s /b *.jpg') do (
  4. for /f "tokens=1,2" %%i in (names.txt) do (
  5. if %%~nxa == %%i ren %%a %%~na_%%j.jpg
  6. )
  7. )
  8. pause
复制代码
1

评分人数

TOP

  1. @echo off
  2. for /f "tokens=1*" %%i in (Names.txt) do ren "%%i" "%%~ni_%%j%%~xi"
  3. pause
复制代码
或是这样
1

评分人数

TOP

谢谢!目的2在原来基础上再套用一个for,能都实现了。

TOP

返回列表