找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 32659|回复: 6

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

[复制链接]
发表于 2018-9-22 17:43:05 | 显示全部楼层 |阅读模式
使用软件批量解压:每个文件到单独的文件夹后→有的文件夹是 压缩文件名/压缩文件名/压缩文件名/需要的文件,有的直接是很方便的 压缩文件名/需要的文件。
就是想要去除中间多余文件夹,当文件夹内只有一个文件夹时候获取更底层文件,当文件夹内有其它情况比如多个文件夹或者文件就把这些需要文件移动到第一层文件夹下并删除中间文件夹,就是 压缩文件名/需要的文件这样的形式,发现会经常遇到多余文件夹却不知道如何入手。
发表于 2018-9-22 22:00:32 | 显示全部楼层
  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. )
复制代码
 楼主| 发表于 2018-9-24 01:50:40 | 显示全部楼层
回复 1# ymica


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


    都移动到根目录下可能出现同名文件覆盖
 楼主| 发表于 2018-9-24 02:51:34 | 显示全部楼层
回复 4# flashercs


大致就是这样的意思,我也在找网上类似的,bat文件放在一个目录下,对这个目录下所有文件夹内的内容缩减,用于批量处理解压后的无用文件夹。就是仅把 AAA\AAA\AAA\AAA\BB\1.txt变成AAA\BB\1.txt 的格式
发表于 2018-9-24 22:22:45 | 显示全部楼层
回复 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”
 楼主| 发表于 2018-9-26 22:43:30 | 显示全部楼层
回复 6# flashercs

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

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 19:36 , Processed in 0.018467 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表