Board logo

标题: [文件操作] 批处理怎样给文件夹前加上层文件夹名? [打印本页]

作者: qd2024    时间: 2023-11-7 07:38     标题: 批处理怎样给文件夹前加上层文件夹名?

在当前目录名为【测试】,下有一个名为【MP3】的文件夹,想在运行代码时,在【MP3】文件夹的文件名前加上当前目录名,改后为【测试MP3】。


说明:
1、只处理文件名为【MP3】的文件夹,对于文件夹名里包含MP3的文件夹不处理。
2、只插入【MP3】文件夹所在上层文件夹的文件名
3、支持子目录,多层目录遵循上述规则,同时处理。


辛苦了 谢谢
作者: terse    时间: 2023-11-7 08:31

  1. @echo off
  2. for /f "delims=" %%i in ('dir /ad /s /b^|findstr /ie "\\mp3"') do (
  3.      for %%j in ("%%~fi\..") do echo "%%~nj%%~ni"
  4. )
  5. pause
复制代码

作者: Batcher    时间: 2023-11-7 09:57

回复 1# qd2024


测试\MP3\MP3
这种情况需要怎么处理呢?
作者: qd2024    时间: 2023-11-7 11:33

回复 3# Batcher

感谢提醒,这种情况一般不会出现 ,如果就先处理就后一层目录里,如目录结构为1\2\3\4,先处理,按4、3、2、1顺序处理
最后的结果是
测试\测试MP3\MP3MP3


再如,如果目录结构为  测试\1MP3\2MP3\3MP3
BAT处理后的目录结构为  测试\测试1MP3\1MP32MP3\2MP33MP3

1MP3、2MP3、3MP3,只是为了说明问题,实际中不含前面的序号

辛苦,谢谢
作者: qd2024    时间: 2023-11-7 11:34

回复 2# terse


    我试试,辛苦了,感谢
作者: terse    时间: 2023-11-7 13:00

回复 5# qd2024
如果重命名的话,再排个序吧 修改为
  1. dir /ad /s /b^|findstr /ie "\\mp3"^|sort /r
复制代码

作者: Five66    时间: 2023-11-7 17:46

目录结构:
测试\a\MP3\MP3\b\MP3\c

放在测试文件夹里运行的结果:
测试\a\aMP3\MP3MP3\b\bMP3\c
  1. @echo off
  2. set "name=mp3"
  3. set n=6144
  4. set m=%n%
  5. for /r /d %%i in (mp?) do (
  6. set p=%%i
  7. call set "_%%n%%=%%p%%"
  8. set /a n-=1
  9. )
  10. for /l %%i in (%n%,1,%m%) do (
  11. set vn=%%i
  12. call :aaa
  13. )
  14. echo,&pause&exit/b
  15. :aaa
  16. setlocal enabledelayedexpansion
  17. if /i "!_%vn%:~-4!" == "\!name!" (
  18. for /f "delims=" %%o in ("!_%vn%:~0,-4!") do set dadada=%%~no
  19. echo,&echo,rename "!_%vn%!" to "!dadada!!_%vn%:~-3!"
  20. rename "!_%vn%!" "!dadada!!_%vn%:~-3!"
  21. )
  22. endlocal
  23. goto :eof
复制代码

作者: qd2024    时间: 2023-11-17 06:55

回复 7# Five66


    感谢




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