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

[文件操作] 批处理删除文件夹失败

需求:指定文件夹下,仅保留pMap开头且.vpk结尾的文件。删除其他文件,包括文件夹。

目前问题:可以保留符合条件的文件,可以删除各个文件夹下的文件。但是无法删除文件夹,无论文件夹是否多级。
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "target_folder=E:\root"
  4. rem 遍历目标文件夹及其子文件夹
  5. for /r "%target_folder%" %%a in (*) do (
  6.     set "filename=%%~nxa"
  7.     if "!filename:~0,4!"=="pMap" (
  8.         if "!filename:~-4!"==".vpk" (
  9.             rem 是pMap开头且.vpk结尾的文件,不做处理
  10.         ) else (
  11.             del "%%a"
  12.         )
  13.     ) else (
  14.         if exist "%%a" (
  15.             if /i "%%~xa"=="" (
  16.                 rem 是文件夹,删除文件夹及其内容
  17.                 rd /s /q "%%a"
  18.             ) else (
  19.                 del "%%a"
  20.             )
  21.         )
  22.     )
  23. )
复制代码

回复 3# 77七
非常感谢

TOP

回复 2# aloha20200628
谢谢大佬

TOP

  1. @echo off
  2. rem 保存为ansi编码
  3. set "target_folder=e:\root"
  4. for /f "delims=" %%i in ('dir /b /s "%target_folder%" ^| sort /r') do (
  5. set n=#%%~ni
  6. set x=%%~xi
  7. set f=%%~fi
  8. setlocal enabledelayedexpansion
  9. if exist "!f!\" (
  10. rd "!f!" 2>nul
  11. ) else if /i "!x!" neq ".vpk" (
  12. del "!f!"
  13. ) else if /i "!n:~1,4!" neq "pmap" (
  14. del "!f!"
  15. )
  16. endlocal
  17. )
  18. pause
复制代码
bat小白,请多指教!谢谢!

TOP

本帖最后由 aloha20200628 于 2024-11-12 14:16 编辑

回复 1# yydada

目录树列表须用 sort/r 排序,以便确保每个子目录节点循行 ‘自底向上’ 的顺序被逐一处理
除非某个子目录中有被保护(如被隐藏)的文件目录项,否则均会依照楼主要求删除...
本脚本文件不要放在 "E:\root" 目录或其子目录中运行
  1. @echo off  &set "td=E:\root" &setlocal enabledelayedexpansion
  2. (dir /b/s/ad "%td%"|sort /r&echo,%td%)>"%td%\0.0"
  3. for /f "usebackq delims=" %%d in ("%td%\0.0") do (
  4.    for /f "delims=" %%F in ('dir /b/a-d "%%d" ') do (
  5.       set "nF=%%~nF" &set "ok=0"
  6.       if /i "!nF:~,4!"=="pmap" if /i "%%~xF"==".vpk" set "ok=1"
  7.       if !ok! equ 0 del /q "%%d\%%F"
  8.    )
  9.    rd /q "%%d"
  10. ) 2>nul
  11. endlocal&pause&exit/b
复制代码

TOP

返回列表