返回列表 发帖
  1. @echo off
  2. set root_dir=c:\
  3. set folderlist="Intel" "PerfLogs" "Program Files" "Program Files (x86)" "Windows" "Users" "8888" "Boot" "Config.Msi" "Documents and Settings" "MSOCache" "ProgramData"
  4. set filelist="kernel*.*" "sealdr*.*" "ABSPE*.*" "bootmgr*.*" "BOOTSECT*.*"
  5. for %%a in (%folderlist%) do (
  6. set d"%%~a"=1
  7. )
  8. setlocal
  9. pushd "%root_dir%"
  10. for /f "delims=" %%i in ('2^>nul dir /b /a-d %filelist%') do (
  11. set f"%%i"=1
  12. )
  13. for /f "delims=" %%d in ('dir /b /a') do (
  14. if exist "%%d\" (
  15. if not defined d"%%d" (
  16. echo rd /s /q "%%d"
  17. )
  18. ) else if not defined f"%%d" (
  19. echo del /a /f "%%d"
  20. )
  21. )
  22. popd
  23. endlocal
  24. pause
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 77七 于 2025-4-3 19:29 编辑

回复 9# ygqiang



如果要求不严谨,突出一个“能用就行“,楼主可试试以下代码 (删除操作需删除echo 及转义符^再执行)。
  1. @echo off
  2. set root_dir=c:
  3. (for /f "delims=" %%a in ('dir /b /a "%root_dir%" ^| findstr /livbg:"%~f0"') do (
  4.         echo rd /s /q "%root_dir%\%%a" ^|^| del /a /f "%root_dir%\%%a"
  5. )) 2>nul
  6. pause
  7. exit
  8. Intel
  9. PerfLogs
  10. Program Files
  11. Program Files (x86)
  12. Windows
  13. Users
  14. 8888
  15. Boot
  16. Config.Msi
  17. Documents and Settings
  18. MSOCache
  19. ProgramData
  20. kernel
  21. sealdr
  22. ABSPE
  23. bootmgr
  24. BOOTSECT
复制代码
bat小白,请多指教!谢谢!

TOP

回复 11# ygqiang


   文件夹和文件横着写成了两行,竖着却只有一列,已经埋下了“祸根”,无法区分文件、文件夹,只有区分它们之后才可进行文件夹的完全匹配、文件的开头匹配,假如匹配末尾(保留*.txt,很常见),代码则完全不适用。
假如仍要写成竖列,比如写两列,以列区分 或者以行区分 或者添加辅助字符去区分,代码进一步复杂,属于多此一举,且真正降低了代码的可读性、可维护性。
bat小白,请多指教!谢谢!

TOP

回复 14# ygqiang


  ”pagefile.sys“ 这个子文件包括在文件夹的排除列表中了,即变量 !d!,会导致误删,还需要更可靠的方法分辨文件夹和文件。
bat小白,请多指教!谢谢!

TOP

返回列表