Board logo

标题: [文件操作] 批处理如何列出所有空目录并删除? [打印本页]

作者: shenjiliangtang    时间: 2023-12-5 17:58     标题: 批处理如何列出所有空目录并删除?

其实功能需求很简单,就是删空目录,论坛里也找到现成的代码并且测试没问题:
  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
复制代码
大神帮我改改啊,问题到底出在哪?
作者: Five66    时间: 2023-12-5 19:24

重定向放到最外层,不过不知道bat能否边写入边读取,建议步骤分开来,先记录,全部完事后再读取
或者试试
(for /f "delims=" %%a in ('dir . /b /ad /s ^|sort /r') do rd /q "%%a" 2>nul && echo,%%a)>111.txt
作者: hfxiang    时间: 2023-12-5 19:49

回复 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
复制代码

作者: ShowCode    时间: 2023-12-5 21:59

回复 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
复制代码

作者: ShowCode    时间: 2023-12-5 21:59

回复 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
复制代码

作者: qixiaobin0715    时间: 2023-12-6 09:56

本帖最后由 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
复制代码

作者: qixiaobin0715    时间: 2023-12-6 11:18

这样简单判断一下也行:
  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
复制代码

作者: shenjiliangtang    时间: 2023-12-6 11:32

回复 7# qixiaobin0715


    对哦,这个思路就很简单清晰,感谢~
作者: hlzj88    时间: 2023-12-6 19:45

假设文件夹只内含有系统特定的隐藏的ini,Thumbs.db文件,是怎么来确定 是空 还是 不空,




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