Board logo

标题: [文本处理] 请问批处理如何更改所有子文件夹内的指定文件名? [打印本页]

作者: ccnyst    时间: 2019-7-26 08:24     标题: 请问批处理如何更改所有子文件夹内的指定文件名?

我现在有一个文件夹,里面有多个名字不重复的子文件夹,子文件夹下还有子文件夹,里面才是文件。
正常的批处理需要每个文件夹单独更名,我想求问如何删除所有子文件夹下含有的所有指定字符。
如下图中的:来阁设计整理出品-工业 (1).jpg  最终修改成  工业 (1).jpg,删除内容为“来阁设计整理出品-”。
并且如果可以,不筛选文件夹或文件,只要是指定字符都删除。
提前谢谢各位大佬了
作者: WHY    时间: 2019-7-26 10:36

你是要修改文件夹名称,还是要修改文件名称?
指定字符指的是短横杠"-"前面的字符串吗?如果名称中出现多个短横杠你打算如何处理?
作者: zaqmlp    时间: 2019-7-26 12:09

  1. @echo off
  2. set info=互助互利,支付宝扫码头像,感谢赞助
  3. rem 有问题,可加QQ956535081及时沟通
  4. title %info%
  5. set "rootpath=%~dp0"
  6. cd /d "%rootpath%"
  7. set "删除字符=来阁设计整理出品-"
  8. powershell -NoProfile -ExecutionPolicy bypass ^
  9.     $list=@(dir -liter '%rootpath%' -r^|?{$_.Name -ne '%~nx0'}^|sort {$_.FullName.length} -des);^
  10.     for($i=0;$i -lt $list.count;$i++){^
  11.         $newname=$list[$i].Name.replace('%删除字符%','');^
  12.         if($newname -ne $list[$i].Name){^
  13.             $newpath=($list[$i].FullName -replace '[^^\\]+$','')+$newname;^
  14.             write-host ($list[$i].FullName+' --^> '+$newname);^
  15.             mv -liter $list[$i].FullName $newpath;^
  16.         };^
  17.     };
  18. echo;%info%
  19. pause
复制代码

作者: ccnyst    时间: 2019-7-29 13:36

回复 2# WHY


    引号内的为需要去掉的文件名,包括横杠,里面没有多个横杠的命名方式
作者: ccnyst    时间: 2019-8-1 21:38

回复 3# zaqmlp


    运行错误
作者: flashercs    时间: 2019-8-2 22:00

本帖最后由 flashercs 于 2019-8-2 22:02 编辑
  1. @echo off
  2. REM 功能:以%dri%为根目录,删除深度大于%depth%的目录中的文件名和文件夹名中字符串%str2replace%
  3. REM 要处理的目录深度是大于%depth%,根目录深度是0,依次递增。
  4. REM depth : 要操作的目录深度必须大于 depth
  5. set "depth=0"
  6. REM 根目录,默认是脚本所在目录
  7. set "dir=%~1"
  8. REM 文件或目录名中需要删除的字符串
  9. set "str2replace=来阁设计整理出品-"
  10. if not defined dir set "dir=%~dp0"
  11. call :recurse "%dir%" 0
  12. pause
  13. exit /b
  14. :recurse
  15. setlocal
  16. pushd %1||goto end
  17. set /a "childdepth=%2+1"
  18. REM 处理当前目录的文件夹,centerorder
  19. for /f "delims=" %%A in ('"2>nul,dir /ad /b"') do (
  20.   call :recurse "%%A" %childdepth%
  21.   if %2 gtr %depth% (
  22.     echo Directory: "%%~fA"
  23.     set "fsoname=%%A"
  24.     call ren "%%A" "%%fsoname:%str2replace%=%%"
  25.   )
  26. )
  27. if %2 leq %depth% goto out
  28. REM 处理当前目录的文件,postorder
  29. for /f "delims=" %%B in ('"2>nul,where ".:*%str2replace%*""') do (
  30.     echo File: "%%B"
  31.     set "fsoname=%%~nxB"
  32.     call ren "%%fsoname%%" "%%fsoname:%str2replace%=%%"
  33. )
  34. :out
  35. popd
  36. :end
  37. endlocal
  38. exit /b
复制代码





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