标题: [文件操作] 求一个批处理指定路径下识别指定文件夹后删除 [打印本页]
作者: 304802301 时间: 2024-12-17 15:16 标题: 求一个批处理指定路径下识别指定文件夹后删除
论坛大神们,求助一个bat,我要实现的是:
1、我提供一个list.txt,有很多行,每一行都是一个文件夹名称(或者文件名称,如果是文件名称的话是有文件格式的)
2、我指定一个路径,在这个路径下面遍历所有的文件及文件夹(含各种子文件夹、子子文件夹等等),找到上述list.txt里面指定的文件及文件夹,识别到就删除(直接删除,不是放到回收站)【如果是文件夹的,则删除此文件夹及他里面的所有内容】
感谢感谢
作者: qixiaobin0715 时间: 2024-12-17 15:43
本帖最后由 qixiaobin0715 于 2024-12-19 09:24 编辑
未经测试,rd,del之类的命令使用时要小心,请备份好源文件,批处理文件和list.txt放在指定路径下,最好不要在代码中cd指定路径,万一不小心指定路径错误或指定路径不存在,有可能就会在批处理文件所在路径下执行,引起不可挽回的损失:- @echo off
- dir /b /s /ad>temp
- for /f "delims=" %%i in ('findstr /e /g:list.txt temp^|sort /r') do rd /s /q "%%i"
- dir /b /s /a-d>temp
- for /f "delims=" %%i in ('findstr /e /g:list.txt temp') do del /q /f "%%i"
- del temp
- pause
复制代码
发现上面代码还是有点问题,暂作废。
比如list.txt如果存在123这么一行字符,而指定目录中又存在类似abc123这样的文件夹,上面代码就会误删此文件夹。
作者: 77七 时间: 2024-12-17 17:16
- @echo off
- set folder=d:\a
- set file=d:\list.txt
- for /f "useback delims=" %%a in ("%file%") do (
- set _"%%~nxa"=1
- )
- for /f "delims=" %%i in ('dir /b /s "%folder%\*"') do (
- if defined _"%%~nxi" (
- if exist "%%i\" (
- rd /s /q "%%i"
- ) else if exist "%%i" (
- del "%%i"
- )
- )
- )
- pause
复制代码
作者: aloha20200628 时间: 7 天前 10:23
本帖最后由 aloha20200628 于 2024-12-18 10:37 编辑
回复 1# 304802301
以下代码第一行假定目标目录为 "d:\test",可由楼主自定义...
逐行读取 list.txt 数据(须是完整目录名称 或 文件名称包括其扩展名),在目标目录及其子目录中匹配出全路径,判断其是目录项或文件项予以彻底删除...- @echo off &for /f "delims=" %%a in (list.txt) do (for /f "delims=" %%x in ('dir /b/s/a "d:\test\%%a" ') do if exist "%%x\" (rd /s/q "%%x") else del /s/q "%%x")>nul 2>nul
- pause&exit/b
复制代码
作者: qixiaobin0715 时间: 7 天前 11:37
本帖最后由 qixiaobin0715 于 2024-12-18 12:41 编辑
更正2楼代码:- @echo off
- (for /f "delims=" %%i in (list.txt) do echo,\%%i)>temp1
- dir /b /s /ad>temp2
- for /f "delims=" %%i in ('findstr /le /g:temp1 temp2^|sort /r') do rd /s /q "%%i"
- dir /b /s /a-d>temp2
- for /f "delims=" %%i in ('findstr /le /g:temp1 temp2') do del /q /f "%%i"
- del temp?
- pause
复制代码
作者: 77七 时间: 7 天前 19:02
- @echo off
- set folder=d:\a
- set file=d:\list.txt
- for /f "useback delims=" %%a in ("%file%") do (
- for /f "delims=" %%i in ('dir /b /s "%folder%\%%a?"') do (
- if /i "%%~nxi" equ "%%a" (
- if exist "%%i\" (
- rd /s /q "%%i"
- ) else if exist "%%i" (
- del "%%i"
- )
- )
- )
- )
- pause
复制代码
作者: yakeyun 时间: 6 天前 12:30
回复 1# 304802301
可以参考修改,这个是我自用的一个视频缓存文件清理脚本,只要匹配到关键词就删除。如果是不限制后缀,就改成*.*检索:- @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- title 视频缓存文件匹配清理工具 by.SanLi
- color 07
- ::mode con: cols=80 lines=25
- chcp 936 >nul
-
- (for /f "tokens=* delims=, " %%f in ('dir /a /s /b .\*.mp4 ') do echo %%f)>"mp4_list.txt"
-
- set keywords=文件列表.txt
- set target=mp4_list.txt
-
- for /f "tokens=*" %%a in (%keywords%) do (
- findstr /C:%%a %target% >nul
- if !errorlevel! equ 0 (
- echo 匹配关键词文件: %%a
- for /f %%b in ('findstr /C:%%a %target%') do (
- del %%b
- echo 即将删除文件:%%b
- )
- echo.
- )
- )
-
- pause
复制代码
文件列表.txt内容:
武映三千道
绝世武魂
斗破苍穹
仙武传
武神主宰
无上神帝
独步逍遥
逆天至尊
炼气十万年
灵剑尊
万界独尊
修罗武神
遮天
魔装传说
百炼成神
完美世界
万古神话
大主宰
神印王座
冰火魔厨
斗罗大陆
恶魔法则
逆天邪神
吞噬星空
少年歌行海外仙山篇
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |