Board logo

标题: [文件操作] [已解决]BAT脚本怎样批量以文件夹名命名全部文件 [打印本页]

作者: 无情浪子哥    时间: 2021-5-7 10:58     标题: [已解决]BAT脚本怎样批量以文件夹名命名全部文件

本帖最后由 无情浪子哥 于 2021-5-8 15:43 编辑

举例说明
原来:
文件夹名称:JC00101
文件夹内文件名称:房屋背面、房屋右侧、房屋正面

修改:
文件夹名称:JC00101
文件夹内文件名称:JC00101房屋背面、JC00101房屋右侧、JC00101房屋正面

这其中有子文件夹、子子文件夹

批量命名文件夹内文件,但文件夹内文件名称不动,增加文件夹名称在文件前面
作者: 无情浪子哥    时间: 2021-5-7 11:05     标题: 附件

https://wwa.lanzous.com/iIBvSovuova
作者: qixiaobin0715    时间: 2021-5-7 11:48

本帖最后由 qixiaobin0715 于 2021-5-7 14:36 编辑

未测试
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b /s /a-d') do (
  3.     for %%i in ("%%~dp0.") do ren "%%a" "%%~ni%%~nxa"
  4. )
  5. pause
复制代码

作者: 无情浪子哥    时间: 2021-5-7 14:30

回复 3# qixiaobin0715
一级文件夹可以使用,二级、三级无法使用
作者: qixiaobin0715    时间: 2021-5-7 14:37

回复 4# 无情浪子哥
3楼代码已修改
作者: 无情浪子哥    时间: 2021-5-7 14:45

回复 5# qixiaobin0715


    你好是可以使用了,但不能以一级文件夹名称命名所有文件了
作者: qixiaobin0715    时间: 2021-5-7 14:54

回复 6# 无情浪子哥
那是你没说明白
bat放在一级文件夹内
作者: 无情浪子哥    时间: 2021-5-7 14:56

回复 7# qixiaobin0715


    我有几百个一级文件夹,不能只放一个一级文件夹
作者: newswan    时间: 2021-5-7 14:59

  1. @echo off
  2. setlocal enableDelayedExpansion
  3. set stra=t1
  4. call :f1 "%~1"
  5. goto :END
  6. :f1
  7. cd %1
  8. for /f "usebackq delims=" %%a in (` dir /b `) do (
  9.     echo "%%a" "%stra%%%a"
  10. )
  11. pause
  12. for /f "usebackq delims=" %%a in (` dir /b /ad `) do (
  13.     call :f1 "%%a"
  14. )
  15. cd ..
  16. goto :eof
  17. :END
  18. pause
复制代码
处理的文件夹t1,如果正确,把echo 改成ren
作者: qixiaobin0715    时间: 2021-5-7 15:33

回复 8# 无情浪子哥
  1. @echo off
  2. for /d %%a in (*) do (
  3. pushd %%a
  4. for /f "delims=" %%i in ('dir /b /s /a-d') do ren "%%i" "%%a%%~nxi"
  5. popd
  6. )
  7. pause
复制代码

作者: cutebe    时间: 2021-5-7 17:17

判断一下文件名,防止多次累加目录名
  1. ::添加目录名前缀
  2. @echo off
  3. cd/d%~dp0
  4. setlocal enableDelayedExpansion
  5. for /f "delims=" %%d in ('dir/s/b/ad')do (
  6. pushd %%d
  7. call :strLen dLen "%%~nxd"
  8. for /f "delims=" %%f in ('dir/b/a-d')do (
  9. set "filename=%%f"
  10. for /f %%s in ("!dlen!")do if "!filename:~,%%s!" neq "%%~nxd" ren "%%f" "%%~nxd%%f"
  11. )
  12. popd
  13. )
  14. pause
  15. goto :eof
  16. :strLen len str ::code by plp626
  17. setlocal
  18. set "$=%~2#"
  19. set N=&for %%a in (4096 2048 1024 512 256 128 64 32 16)do if !$:~%%a!. NEQ . set/aN+=%%a&set $=!$:~%%a!
  20. set $=!$!fedcba9876543210&set/aN+=0x!$:~16,1!
  21. endlocal&set/a%1=%N%
  22. goto :eof
复制代码

作者: 无情浪子哥    时间: 2021-5-8 15:36

本帖最后由 无情浪子哥 于 2021-5-8 15:41 编辑

回复 11# cutebe

九楼运行没有反应、十一楼只能到二级,三级四级没有反应
作者: 无情浪子哥    时间: 2021-5-8 15:38

回复 10# qixiaobin0715


    谢谢,可以使用了




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