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

[文件操作] 【已解决】如何用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
复制代码
1

评分人数

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

回复 8# tempwq

一次友好的互助
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

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

TOP

回复 5# tempwq
赞助才是我的动力
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

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

TOP

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

TOP

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

TOP

  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
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

输入其它键(非1非2)会放弃?我没看明白啊。

TOP

返回列表