[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] 求助批处理解压文件后去除中间多层文件夹

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

  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. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 1# ymica


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

TOP

回复 3# ymica


    都移动到根目录下可能出现同名文件覆盖

TOP

回复 4# flashercs


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

TOP

回复 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”

TOP

回复 6# flashercs

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

TOP

返回列表