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

[文件操作] 如何根据txt文本中列出的文件及其新的文件名的对应关系对多个文件夹里的文件重命名

本帖最后由 pcl_test 于 2016-11-16 21:57 编辑

我在网上下载了万册图书,总共一万册,共100个文件夹,每个文件夹下100个文件,但都是每个文件都是按序号命名的,如ts001001.pdf,ts001002.pdf,ts001003.pdf等等,本人小白想通过批处理重命名,,重命名的文件名从TXT文件中查找匹配然后重命名,


TXT中部分内容如下:每一行的前面为现在的文件名,后面的部分为需要更改的文件名
  1. ts001001.pdf 世界科技全景百卷书(1)原始科技
  2. ts001002.pdf 世界科技全景百卷书(2)数学与物理的发端
  3. ts001003.pdf 世界科技全景百卷书(3)近代科技
  4. ts001004.pdf 世界科技全景百卷书(4)蒸汽机带来的**
  5. ts001005.pdf 世界科技全景百卷书(5)现代科技
  6. ts001006.pdf 世界科技全景百卷书(6)二十一世纪之光
  7. ts001007.pdf 世界科技全景百卷书(7)科学的真与伪
  8. ts001008.pdf 世界科技全景百卷书(8)真理的足迹
  9. ts001009.pdf 世界科技全景百卷书(9)科技之谜
  10. ts001010.pdf 世界科技全景百卷书(10)奖杯的故事
  11. ts001011.pdf 世界科技全景百卷书(11)饮食文化
  12. ts001012.pdf 世界科技全景百卷书(12)漫话衣饰
  13. ts001013.pdf 世界科技全景百卷书(13)生活用品大观
  14. ts001014.pdf 世界科技全景百卷书(14)农具与农技
  15. ts001015.pdf 世界科技全景百卷书(15)钟表家族
  16. ts001016.pdf 世界科技全景百卷书(16)医药纵横
  17. ts001017.pdf 世界科技全景百卷书(17)话说通讯
  18. ts001018.pdf 世界科技全景百卷书(18)文化用品博览
  19. ts001019.pdf 世界科技全景百卷书(19)工具小百科
  20. ts001020.pdf 世界科技全景百卷书(20)影视俱乐部
  21. ts001021.pdf 世界科技全景百卷书(21)照明
  22. ts001022.pdf 世界科技全景百卷书(22)船舶
  23. ts001023.pdf 世界科技全景百卷书(23)飞机
  24. ts001024.pdf 世界科技全景百卷书(24)车辆
  25. ts001025.pdf 世界科技全景百卷书(25)机械
  26. ts001026.pdf 世界科技全景百卷书(26)材料
  27. ts001027.pdf 世界科技全景百卷书(27)仪器设备
  28. ts001028.pdf 世界科技全景百卷书(28)电器
  29. ts001029.pdf 世界科技全景百卷书(29)计算机
  30. ts001030.pdf 世界科技全景百卷书(30)技术
  31. ts001031.pdf 世界科技全景百卷书(31)考古大发现
  32. ts001032.pdf 世界科技全景百卷书(32)寻找文明遗迹
复制代码

本帖最后由 pcl_test 于 2017-6-14 00:07 编辑
  1. @echo off
  2. powershell ^
  3.     $list=@{};gc -LiteralPath '文本.txt'^|%%{^
  4.         $line=$_.trim();^
  5.         if($line){^
  6.             $t=$line -split '(?^<=^^\S+)\s+';^
  7.             $list[$t[0].toLower()]=$t[1];^
  8.         }^
  9.     };^
  10.     dir . *.pdf -r^|?{$_ -is [System.IO.FileInfo]}^|%%{^
  11.         if($list[$_.Name.toLower()]){^
  12.             mv -LiteralPath $_.FullName ($_.DirectoryName+'\'+$list[$_.Name.toLower()]+$_.Extension);^
  13.         }^
  14.     }
  15. pause
复制代码

TOP

回复 5# apang

能改进一下吗?重命名的文件名应该是a.txt文件中每一行第一个空格后面所有的字符(字符中可能包含空格,比如几个英文之间),,还有执行效率能增加吗,,有点慢,,1万个文件重命可能要花3,4个小时,而且运行了是还显示找不到文件,倒是有大部分没有重命名,,非常感谢

TOP

假设100个文件夹全部位于d:\abc下.
  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. )
复制代码

TOP

回复 2# terse


可以更改所有子文件夹中的文件吗?

TOP

,,,,,,,,,,,,,,,,,

TOP

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

TOP

返回列表