标题: [文件操作] 批处理删除文件夹失败 [打印本页]
作者: yydada 时间: 2024-11-12 09:54 标题: 批处理删除文件夹失败
需求:指定文件夹下,仅保留pMap开头且.vpk结尾的文件。删除其他文件,包括文件夹。
目前问题:可以保留符合条件的文件,可以删除各个文件夹下的文件。但是无法删除文件夹,无论文件夹是否多级。- @echo off
- setlocal enabledelayedexpansion
-
- set "target_folder=E:\root"
-
- rem 遍历目标文件夹及其子文件夹
- for /r "%target_folder%" %%a in (*) do (
- set "filename=%%~nxa"
- if "!filename:~0,4!"=="pMap" (
- if "!filename:~-4!"==".vpk" (
- rem 是pMap开头且.vpk结尾的文件,不做处理
- ) else (
- del "%%a"
- )
- ) else (
- if exist "%%a" (
- if /i "%%~xa"=="" (
- rem 是文件夹,删除文件夹及其内容
- rd /s /q "%%a"
- ) else (
- del "%%a"
- )
- )
- )
- )
复制代码
作者: aloha20200628 时间: 2024-11-12 11:11
本帖最后由 aloha20200628 于 2024-11-12 14:16 编辑
回复 1# yydada
目录树列表须用 sort/r 排序,以便确保每个子目录节点循行 ‘自底向上’ 的顺序被逐一处理
除非某个子目录中有被保护(如被隐藏)的文件目录项,否则均会依照楼主要求删除...
本脚本文件不要放在 "E:\root" 目录或其子目录中运行
- @echo off &set "td=E:\root" &setlocal enabledelayedexpansion
- (dir /b/s/ad "%td%"|sort /r&echo,%td%)>"%td%\0.0"
- for /f "usebackq delims=" %%d in ("%td%\0.0") do (
- for /f "delims=" %%F in ('dir /b/a-d "%%d" ') do (
- set "nF=%%~nF" &set "ok=0"
- if /i "!nF:~,4!"=="pmap" if /i "%%~xF"==".vpk" set "ok=1"
- if !ok! equ 0 del /q "%%d\%%F"
- )
- rd /q "%%d"
- ) 2>nul
- endlocal&pause&exit/b
复制代码
作者: 77七 时间: 2024-11-12 13:49
- @echo off
- rem 保存为ansi编码
- set "target_folder=e:\root"
- for /f "delims=" %%i in ('dir /b /s "%target_folder%" ^| sort /r') do (
- set n=#%%~ni
- set x=%%~xi
- set f=%%~fi
- setlocal enabledelayedexpansion
- if exist "!f!\" (
- rd "!f!" 2>nul
- ) else if /i "!x!" neq ".vpk" (
- del "!f!"
- ) else if /i "!n:~1,4!" neq "pmap" (
- del "!f!"
- )
- endlocal
- )
- pause
复制代码
作者: yydada 时间: 2024-11-14 02:04
回复 2# aloha20200628
谢谢大佬
作者: yydada 时间: 2024-11-14 02:05
回复 3# 77七
非常感谢
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |