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

[文件操作] 批处理如何列出所有空目录并删除?

[复制链接]
发表于 2023-12-5 17:58:48 | 显示全部楼层 |阅读模式
其实功能需求很简单,就是删空目录,论坛里也找到现成的代码并且测试没问题:
  1. for /f "delims=" %%a in ('dir . /b /ad /s ^|sort /r') do rd /q "%%a" 2>nul
复制代码
但同时我希望列出所有删除的空目录以便检查确认,于是我试了好多办法,比如把rd命令的错误信息输出到exist文件,通过判断这个文件的内容来输出路径,结果就是它只会输出第一个空路径,后面的就不显示了(但不影响删除)。。。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. echo 删除空目录:
  4. for /f "delims=" %%a in ('dir . /b /ad /s ^|sort /r') do (
  5. rd /q "%%a" 2>exist
  6. set /p value=</.exist
  7. set value=!value:~0,6!
  8. if NOT "!value!"=="目录不是空的" echo %%a
  9. )
  10. echo 空目录删除完成!
  11. echo.
  12. echo.
  13. pause
复制代码
大神帮我改改啊,问题到底出在哪?
发表于 2023-12-5 19:24:37 | 显示全部楼层
重定向放到最外层,不过不知道bat能否边写入边读取,建议步骤分开来,先记录,全部完事后再读取
或者试试
(for /f "delims=" %%a in ('dir . /b /ad /s ^|sort /r') do rd /q "%%a" 2>nul && echo,%%a)>111.txt
发表于 2023-12-5 19:49:12 | 显示全部楼层
回复 1# shenjiliangtang
试试

  1. @echo off
  2. @rem 保存为ANSI格式
  3. setlocal enabledelayedexpansion
  4. for /f "delims=" %%a in ('dir/b/s/ad^|sort/r') do (
  5.         set "Empty_Folder="
  6.         for /f "delims=" %%b in ('dir/a/b "%%~a"') do set "Empty_Folder=%%~b"
  7.         if "!Empty_Folder!." equ "." rd/q/s "%%~a">nul 2>&1
  8. )
  9. endlocal
  10. popd
复制代码
发表于 2023-12-5 21:59:25 | 显示全部楼层
回复 1# shenjiliangtang


V1.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "OutFile=EmptyFolderList.txt"
  4. type nul > "%OutFile%"
  5. echo 删除空目录:
  6. for /f "delims=" %%a in ('dir /b /ad /s ^ |sort /r') do (
  7.     rd /q "%%a" 2>nul && >>"%OutFile%" echo,%%a
  8. )
  9. echo 空目录删除完成!
  10. pause
复制代码
发表于 2023-12-5 21:59:53 | 显示全部楼层
回复 1# shenjiliangtang


V2.bat
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "OutFile=EmptyFolderList.txt"
  4. type nul > "%OutFile%"
  5. echo 删除空目录:
  6. for /f "delims=" %%a in ('dir /b /ad /s ^ |sort /r') do (
  7.     rd /q "%%a" 2>nul
  8.     if not errorlevel 1 (
  9.         >> "%OutFile%" echo,%%a
  10.     )
  11. )
  12. echo 空目录删除完成!
  13. pause
复制代码
发表于 2023-12-6 09:56:15 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-12-7 10:02 编辑

可选择性的使用rd命令,也就是说只有目录为空时才使用rd命令:
  1. @echo off
  2. (echo,Empty Directory:
  3. for /f "delims=" %%i in ('dir /s /b /ad^|sort /r') do (
  4.     set n=0
  5.     pushd "%%i"
  6.     for /f "delims=" %%j in ('dir /b') do set n=
  7.     popd
  8.     if defined n (
  9.         echo,%%i
  10.         rd "%%i"
  11.     )
  12. ))>ED.txt
  13. pause
复制代码
发表于 2023-12-6 11:18:53 | 显示全部楼层
这样简单判断一下也行:
  1. @echo off
  2. (for /f "delims=" %%i in ('dir /s /b /ad^|sort /r') do (
  3.     rd "%%i" 2>nul
  4.     if not exist "%%i" echo,%%i
  5. ))>EDList.txt
  6. pause
复制代码
 楼主| 发表于 2023-12-6 11:32:57 | 显示全部楼层
回复 7# qixiaobin0715


    对哦,这个思路就很简单清晰,感谢~
发表于 2023-12-6 19:45:12 | 显示全部楼层
假设文件夹只内含有系统特定的隐藏的ini,Thumbs.db文件,是怎么来确定 是空 还是 不空,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 06:56 , Processed in 0.023589 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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