找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 27424|回复: 5

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

[复制链接]
发表于 2019-7-26 08:24:28 | 显示全部楼层 |阅读模式
我现在有一个文件夹,里面有多个名字不重复的子文件夹,子文件夹下还有子文件夹,里面才是文件。
正常的批处理需要每个文件夹单独更名,我想求问如何删除所有子文件夹下含有的所有指定字符。
如下图中的:来阁设计整理出品-工业 (1).jpg  最终修改成  工业 (1).jpg,删除内容为“来阁设计整理出品-”。
并且如果可以,不筛选文件夹或文件,只要是指定字符都删除。
提前谢谢各位大佬了
发表于 2019-7-26 10:36:22 | 显示全部楼层
你是要修改文件夹名称,还是要修改文件名称?
指定字符指的是短横杠"-"前面的字符串吗?如果名称中出现多个短横杠你打算如何处理?
发表于 2019-7-26 12:09:14 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2019-7-29 13:36:44 | 显示全部楼层
回复 2# WHY


    引号内的为需要去掉的文件名,包括横杠,里面没有多个横杠的命名方式
 楼主| 发表于 2019-8-1 21:38:18 | 显示全部楼层
回复 3# zaqmlp


    运行错误
发表于 2019-8-2 22:00:39 | 显示全部楼层
本帖最后由 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-21 04:30 , Processed in 0.028225 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表