Board logo

标题: [文件操作] 求助批处理解压文件后去除中间多层文件夹 [打印本页]

作者: ymica    时间: 2018-9-22 17:43     标题: 求助批处理解压文件后去除中间多层文件夹

使用软件批量解压:每个文件到单独的文件夹后→有的文件夹是 压缩文件名/压缩文件名/压缩文件名/需要的文件,有的直接是很方便的 压缩文件名/需要的文件。
就是想要去除中间多余文件夹,当文件夹内只有一个文件夹时候获取更底层文件,当文件夹内有其它情况比如多个文件夹或者文件就把这些需要文件移动到第一层文件夹下并删除中间文件夹,就是 压缩文件名/需要的文件这样的形式,发现会经常遇到多余文件夹却不知道如何入手。
作者: Batcher    时间: 2018-9-22 22:00

  1. @echo off
  2. for %%i in (*.rar) do (
  3.     if not exist "%%~ni\" (
  4.         md "%%~ni"
  5.         move "%%i" "%%~ni\"
  6.         pushd "%%~ni"
  7.         "C:\Program Files\WinRAR\rar.exe" e "%%i"
  8.         popd
  9.     )
  10. )
复制代码

作者: ymica    时间: 2018-9-24 01:50

回复 1# ymica


    很抱歉这么晚才回复,很感谢花时间,测试了下如果是rar完全能解决我的问题非常好。但我想的是已经解压出来的 文件夹/文件夹/文件 这样的格式,去除中间多余层(思考)。
作者: flashercs    时间: 2018-9-24 02:20

回复 3# ymica


    都移动到根目录下可能出现同名文件覆盖
作者: ymica    时间: 2018-9-24 02:51

回复 4# flashercs


大致就是这样的意思,我也在找网上类似的,bat文件放在一个目录下,对这个目录下所有文件夹内的内容缩减,用于批量处理解压后的无用文件夹。就是仅把 AAA\AAA\AAA\AAA\BB\1.txt变成AAA\BB\1.txt 的格式
作者: flashercs    时间: 2018-9-24 22:22

回复 5# ymica
  1. @echo off
  2. set "dir=%~1"
  3. if not defined dir set "dir=%~dp0"
  4. call :recurse "%dir%" 0 "%dir%"
  5. pause
  6. exit /b
  7. :recurse
  8. setlocal
  9. pushd %1||goto end
  10. set /a "childlevel=%2+1"
  11. for /f "delims=" %%A in ('"2>nul,dir /ad /b"') do (
  12. call :recurse "%%A" %childlevel% %3
  13. rd /q "%%A"||echo "%%~fA"
  14. )
  15. if %2 leq 1 goto out
  16. set "destDir=%~3\%~1"
  17. if exist "%destDir%" (
  18. for /f "delims=" %%B in ('"2>nul,dir /a-d /b"') do (
  19. call :rf "%%B" "%destDir%"
  20. )
  21. ) else (
  22. md "%destDir%"
  23. move /y * "%destDir%\"
  24. )
  25. :out
  26. popd
  27. :end
  28. endlocal
  29. exit /b
  30. :rf
  31. set "fname=%~n1"
  32. set "fext=%~x1"
  33. set /a "cnt=1"
  34. :loop
  35. if exist "%~2\%fname%%fext%" (
  36. set "fname=%~n1_%cnt%"
  37. set /a "cnt+=1"
  38. goto loop
  39. ) else (
  40. move %1 "%~2\%fname%%fext%"
  41. )
  42. exit /b
复制代码
保留一级子目录.bat
子目录下的文件都提取到根目录下。
例如文件夹"E:\A"是根目录:可以将批处理放到“E:\A”下运行或者 给批处理传递参数  保留一级子目录.bat “E:\A”
作者: ymica    时间: 2018-9-26 22:43

回复 6# flashercs

感谢写了这么多,基本上差不多了。这段假如我在子文件夹新建一个文件夹,运行后新建文件夹也会被移动到根目录,我实际想要的是缩减中间重复文件夹




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