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

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

[复制链接]
发表于 2024-11-12 09:54:42 | 显示全部楼层 |阅读模式
需求:指定文件夹下,仅保留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. )
复制代码
发表于 2024-11-12 11:11:54 | 显示全部楼层
本帖最后由 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
复制代码
发表于 2024-11-12 13:49:59 | 显示全部楼层
  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
复制代码
 楼主| 发表于 2024-11-14 02:04:26 | 显示全部楼层
回复 2# aloha20200628
谢谢大佬
 楼主| 发表于 2024-11-14 02:05:03 | 显示全部楼层
回复 3# 77七
非常感谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 14:23 , Processed in 0.017577 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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