Board logo

标题: [文件操作] 【已解决】如何用bat批量修改文件夹和文件名称 [打印本页]

作者: tempwq    时间: 2019-3-19 13:50     标题: 【已解决】如何用bat批量修改文件夹和文件名称

有以下问题求助
情况设定:

有一个文件夹下面有多个文件夹及文件,文件夹和文件名称开头大部是由15位时间的数字和短横组成开头,例如:20190319110810-行业基础-001.txt。部分文件夹或文件的名称前面没有时间开头,例如:行业基础-074.txt。


拟编写bat文件实现以下功能(功能需求):
1.如果文件夹或者文件名称以15位时间组成开头,删去前面15位时间组成的开头。如20190319112109-示例文件夹-001,变成示例文件夹-001;20190319112038-行业基础-003.txt,变成行业基础-003.txt。
2.如果文件夹或者文件名称没有以15位时间组成开头,则文件夹或者文件名称不变。但仅以年份开头的文件不变名称,如2019年工作计划.txt,不作修改。
3.作用范围为当前文件夹及当前文件夹的子文件夹中所有文件夹和文件(对我而言是难点)。


自己编写了bat代码,仅能实现当前文件夹内文件夹和文件名称的修改,但对当前文件夹的子文件夹无效,需要把bat文件逐个拷入到子文件夹中依次处理。代码如下:
  1. @ECHO OFF&Setlocal EnableDelayedExpansion
  2. :5
  3. set answer=N
  4. echo.
  5. echo 批量删除文件前面日期选择1,批量删除文件夹前面日期选择2,是否继续?
  6. set /p answer=文件选1,文件夹选2,输入其它键放弃...
  7. if "%answer%"=="1" goto :1
  8. if "%answer%"=="2" goto :2
  9. ::删除文件前面日期
  10. :1
  11. set /p z=s输入去掉字符个数:
  12. set /a y=1%z%1||goto 1
  13. for %%i in (*) do (set a=%%i
  14. set c=!a:~0,3!
  15. If "!c!"=="201" (
  16. ::如果前面是以201开头的文件则删除,非201开头的文件不执行下面操作
  17. set b=!a:~%z%!
  18. ::删除前几位
  19. ::set b=!a:~0,%z%!
  20. ::保留前几位
  21. ren "%%i" "!b!"
  22. )
  23. )
  24. goto 5
  25. ::删除文件夹前面日期
  26. :2
  27. echo 删除文件夹前面日期
  28. set /p z=s输入去掉字符个数:
  29. set /a y=1%z%1||goto 2
  30. for /d %%i in (*) do (set a=%%i
  31. set c=!a:~0,3!
  32. If "!c!"=="201" (
  33. ::如果前面是以201开头的文件则删除,非201开头的文件不执行下面操作
  34. set b=!a:~%z%!
  35. ::删除前几位
  36. ::set b=!a:~0,%z%!
  37. ::保留前几位
  38. ren "%%i" "!b!"
  39. )
  40. )
  41. goto 5
  42. pause
复制代码

作者: xczxczxcz    时间: 2019-3-19 14:21

输入其它键(非1非2)会放弃?我没看明白啊。
作者: zaqmlp    时间: 2019-3-19 15:16

  1. @echo off
  2. mode con lines=2000
  3. title 互助互利,扫码头像,感谢赞助;有问题,加QQ956535081及时沟通
  4. cd /d "%~dp0"
  5. powershell ^
  6.     dir -r^|?{$_.BaseName -match '^^\d{14}-'}^|sort {$_.FullName.Length} -des^|%%{^
  7.         $newname=($_.BaseName -replace '^^\d{14}-','')+$_.Extension;^
  8.         $newfile=$fd=[IO.Directory]::GetParent($_.FullName).FullName+'\'+$newname;^
  9.         if(-not (test-path -liter $newfile)){^
  10.             write-host $_.FullName -nonewline;^
  11.             write-host (' --^> '+$newname) -ForegroundColor green;^
  12.             mv -liter $_.FullName $newfile;^
  13.         }else{^
  14.             write-host ('[重名]'+$_.FullName+' --^> '+$newname) -ForegroundColor red;^
  15.         };^
  16.     };
  17. pause
复制代码

作者: tigerpower    时间: 2019-3-19 16:16

下载jren
  1. set cmd=jren "^\d{14}-" "" /s & %cmd% /d & %cmd%
复制代码

作者: tempwq    时间: 2019-3-19 16:46

试了一下可以用,非常感谢您的帮忙和辛苦付出!
zaqmlp 发表于 2019-3-19 15:16

作者: tempwq    时间: 2019-3-19 16:47

我是小白,试了一下不会用,不过也感谢您的帮助,再次感谢!
下载
tigerpower 发表于 2019-3-19 16:16

作者: zaqmlp    时间: 2019-3-19 16:49

回复 5# tempwq
赞助才是我的动力
作者: tempwq    时间: 2019-3-20 11:36

已赞助,不多,请见谅,谢谢帮助哈!
回复  tempwq
赞助才是我的动力
zaqmlp 发表于 2019-3-19 16:49

作者: zaqmlp    时间: 2019-3-20 11:47

回复 8# tempwq

一次友好的互助




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