Board logo

标题: [文件操作] 求一个批处理指定路径下识别指定文件夹后删除 [打印本页]

作者: 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指定路径,万一不小心指定路径错误或指定路径不存在,有可能就会在批处理文件所在路径下执行,引起不可挽回的损失:
  1. @echo off
  2. dir /b /s /ad>temp
  3. for /f "delims=" %%i in ('findstr /e /g:list.txt temp^|sort /r') do rd /s /q "%%i"
  4. dir /b /s /a-d>temp
  5. for /f "delims=" %%i in ('findstr /e /g:list.txt temp') do del /q /f "%%i"
  6. del temp
  7. pause
复制代码
发现上面代码还是有点问题,暂作废。
比如list.txt如果存在123这么一行字符,而指定目录中又存在类似abc123这样的文件夹,上面代码就会误删此文件夹。
作者: 77七    时间: 2024-12-17 17:16

  1. @echo off
  2. set folder=d:\a
  3. set file=d:\list.txt
  4. for /f "useback delims=" %%a in ("%file%") do (
  5. set _"%%~nxa"=1
  6. )
  7. for /f "delims=" %%i in ('dir /b /s "%folder%\*"') do (
  8. if defined _"%%~nxi" (
  9. if exist "%%i\" (
  10. rd /s /q "%%i"
  11. ) else if exist "%%i" (
  12. del "%%i"
  13. )
  14. )
  15. )
  16. pause
复制代码

作者: aloha20200628    时间: 2024-12-18 10:23

本帖最后由 aloha20200628 于 2024-12-18 10:37 编辑

回复 1# 304802301

以下代码第一行假定目标目录为 "d:\test",可由楼主自定义...
逐行读取 list.txt 数据(须是完整目录名称 或 文件名称包括其扩展名),在目标目录及其子目录中匹配出全路径,判断其是目录项或文件项予以彻底删除...
  1. @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
  2. pause&exit/b
复制代码

作者: qixiaobin0715    时间: 2024-12-18 11:37

本帖最后由 qixiaobin0715 于 2024-12-18 12:41 编辑

更正2楼代码:
  1. @echo off
  2. (for /f "delims=" %%i in (list.txt) do echo,\%%i)>temp1
  3. dir /b /s /ad>temp2
  4. for /f "delims=" %%i in ('findstr /le /g:temp1 temp2^|sort /r') do rd /s /q "%%i"
  5. dir /b /s /a-d>temp2
  6. for /f "delims=" %%i in ('findstr /le /g:temp1 temp2') do del /q /f "%%i"
  7. del temp?
  8. pause
复制代码

作者: 77七    时间: 2024-12-18 19:02

  1. @echo off
  2. set folder=d:\a
  3. set file=d:\list.txt
  4. for /f "useback delims=" %%a in ("%file%") do (
  5. for /f "delims=" %%i in ('dir /b /s "%folder%\%%a?"') do (
  6. if /i "%%~nxi" equ "%%a" (
  7. if exist "%%i\" (
  8. rd /s /q "%%i"
  9. ) else if exist "%%i" (
  10. del "%%i"
  11. )
  12. )
  13. )
  14. )
  15. pause
复制代码

作者: yakeyun    时间: 2024-12-19 12:30

回复 1# 304802301

可以参考修改,这个是我自用的一个视频缓存文件清理脚本,只要匹配到关键词就删除。如果是不限制后缀,就改成*.*检索:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. title 视频缓存文件匹配清理工具 by.SanLi
  5. color 07
  6. ::mode con: cols=80 lines=25
  7. chcp 936 >nul
  8. (for /f "tokens=* delims=, " %%f in ('dir /a /s /b .\*.mp4 ') do echo %%f)>"mp4_list.txt"
  9. set keywords=文件列表.txt
  10. set target=mp4_list.txt
  11. for /f "tokens=*" %%a in (%keywords%) do (
  12.     findstr /C:%%a %target% >nul
  13.     if !errorlevel! equ 0 (
  14.         echo 匹配关键词文件: %%a
  15.         for /f %%b in ('findstr /C:%%a %target%') do (
  16.         del %%b
  17.         echo 即将删除文件:%%b
  18.         )
  19.         echo.
  20.     )
  21. )
  22. pause
复制代码
文件列表.txt内容:

武映三千道
绝世武魂
斗破苍穹
仙武传
武神主宰
无上神帝
独步逍遥
逆天至尊
炼气十万年
灵剑尊
万界独尊
修罗武神
遮天
魔装传说
百炼成神
完美世界
万古神话
大主宰
神印王座
冰火魔厨
斗罗大陆
恶魔法则
逆天邪神
吞噬星空
少年歌行海外仙山篇




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2