Board logo

标题: [文件操作] [分享]批处理移动子文件夹下的文件到当前文件夹并保留目录信息 [打印本页]

作者: Batcher    时间: 2023-9-27 13:27     标题: [分享]批处理移动子文件夹下的文件到当前文件夹并保留目录信息

【问题描述】

当前目录下有若干个文件夹,每个文件夹下有级数不等的子文件夹,每个子文件夹下有若干个文件。
需要把每个文件夹及子文件夹下的文件都移动到当前目录下。
同时把每一级文件夹的名称添加到文件名前面,中间用三个空格隔开。
移动文件之后,删除空文件夹。
待处理的文件夹名称保存在当前目录下的“文件夹列表.txt”里面,例如:
文件夹列表.txt
  1. FolderA
  2. FolderD
复制代码
处理之前的目录结构:
  1. E:\M\1.bat
  2. E:\M\FolderA
  3. E:\M\FolderD
  4. E:\M\FolderH
  5. E:\M\文件夹列表.txt
  6. E:\M\FolderA\1.txt
  7. E:\M\FolderA\B!
  8. E:\M\FolderA\B!\2.txt
  9. E:\M\FolderA\B!\C
  10. E:\M\FolderA\B!\C\3.txt
  11. E:\M\FolderD\4.txt
  12. E:\M\FolderD\E!
  13. E:\M\FolderD\E!\5.txt
  14. E:\M\FolderD\E!\F
  15. E:\M\FolderD\E!\F\6.txt
  16. E:\M\FolderD\E!\F\G
  17. E:\M\FolderD\E!\F\G\7.txt
复制代码
处理之后的目录结构:
  1. E:\M\1.bat
  2. E:\M\FolderA   1.txt
  3. E:\M\FolderA   B!   2.txt
  4. E:\M\FolderA   B!   C   3.txt
  5. E:\M\FolderD   4.txt
  6. E:\M\FolderD   E!   5.txt
  7. E:\M\FolderD   E!   F   6.txt
  8. E:\M\FolderD   E!   F   G   7.txt
  9. E:\M\FolderH
  10. E:\M\文件夹列表.txt
复制代码
1.bat的内容应该是怎样的?
作者: Batcher    时间: 2023-9-27 13:28

【解决方案】

请参考Q-04和Q-05把bat文件和txt文件都保存为UTF-8编码:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
  1. @echo off
  2. chcp 65001 >nul
  3. cd /d "%~dp0"
  4. set "StrPrefix=%~dp0"
  5. for /f "delims=" %%a in ('type "文件夹列表.txt"')  do (
  6.     echo 正在处理文件夹 %%a
  7.     pushd "%%a"
  8.     for /f "delims=" %%i in ('dir /b /s /a-d') do (
  9.         echo,%%i
  10.         set "OldName=%%i"
  11.         setlocal enabledelayedexpansion
  12.         set "NewName=!OldName:%StrPrefix%=!"
  13.         set "NewName=!NewName:\=   !"
  14.         move "!OldName!" "%~dp0!NewName!"
  15.         endlocal
  16.     )
  17.     for /f "delims=" %%i in ('dir /b /s /ad ^| sort /r') do (
  18.         if exist "%%i" (
  19.             rd "%%i"
  20.         )
  21.     )
  22.     popd
  23.     if exist "%%a" (
  24.         rd "%%a"
  25.     )
  26. )
复制代码





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