Board logo

标题: [文本处理] 批处理如何把txt文本内容包含特定的关键字就删除文件,关键字很多个以文本文件提供 [打印本页]

作者: cxq00    时间: 2024-8-11 21:37     标题: 批处理如何把txt文本内容包含特定的关键字就删除文件,关键字很多个以文本文件提供

本帖最后由 cxq00 于 2024-8-12 00:03 编辑

批处理如何把txt文本内容包含特定的关键字就删除文件,关键字很多个以文本文件提供,不放在同一目录下的

例如:一个关键字txt文件是放在 E:\文件\list.txt  关键字可能有三五个这样的
        几十个文本文件存放在 E:\文件\文档汇总
     我要的效果是文本内容只要是包含任意特定关键字的就删除,没有就留下。 重点是文本中的内容只要包含任一个关键字符的就删除,不是文件名称包含。
作者: newswan    时间: 2024-8-11 21:51

本帖最后由 newswan 于 2024-8-11 22:03 编辑

大致如此
  1. for /f  %%a in (list.txt) do (
  2.     echo del *%%a*.*
  3. )
  4. pause
  5. exit/b
复制代码

作者: cxq00    时间: 2024-8-11 21:55

回复 2# newswan


    这个不行,直接闪没了
作者: newswan    时间: 2024-8-11 22:04

本帖最后由 newswan 于 2024-8-11 22:06 编辑

回复 3# cxq00

看看输出,补充其他部分:
list.txt 在哪里
被删除的文件在哪里
list 文件怎么写
作者: 77七    时间: 2024-8-11 22:19

  1. @echo off
  2. rem 保存为ansi
  3. cd /d "%~dp0"
  4. set file=d:\1.txt
  5. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  6. call :1 "%%i"
  7. )
  8. pause
  9. exit
  10. :1
  11. for /f "useback delims=" %%a in ("%file%") do (
  12. find "%%a" "%~1" 1>nul
  13. if not errorlevel 1 (
  14. del "%~1"
  15. echo find "%%a" del "%~1"
  16. exit /b
  17. )
  18. )
  19. exit /b
复制代码

作者: cxq00    时间: 2024-8-11 22:28

回复 4# newswan


    例如:关键字txt文本在 E:\文件   ,需要删除的文本文件夹E:\文件\文档汇总下

   关键字是一行一个
作者: newswan    时间: 2024-8-11 23:29

本帖最后由 newswan 于 2024-8-11 23:45 编辑

回复 6# cxq00
  1. @echo off
  2. set list="E:\文件\list*.txt"
  3. set dest="E:\文件\文档汇总"
  4. pushd %dest%
  5. for /f "usebackq tokens=* delims=" %%a in (` type %list% `) do (
  6. echo del *%%a*.*
  7. )
  8. popd
  9. pause
  10. exit/b
复制代码
看下输出 修改第8行
作者: aloha20200628    时间: 2024-8-11 23:43

本帖最后由 aloha20200628 于 2024-8-12 09:10 编辑

回复 6# cxq00

假设当前目录中的关键词列表文件为 1.lst
以下批处代码在当前目录下运行,将会删除 "E:\文件\文档汇总\" 子目录中包含 1.lst 所列关键词的 *.txt 文件
  1. @echo off &for /f "delims=" %%F in (
  2.     'dir /b/a-d E:\文件\文档汇总\*.txt'
  3. ) do findstr /limg:"1.lst" "E:\文件\文档汇总\%%F"&&del /q "E:\文件\文档汇总\%%F"
  4. pause&exit/b
复制代码

作者: cxq00    时间: 2024-8-11 23:44

回复 7# newswan

运行后只显示这个,其他都没变化
    del *aa*.*
del *bb*.*
del *cc*.*
del *dd*.*
请按任意键继续. . .
作者: newswan    时间: 2024-8-11 23:48

回复 9# cxq00

先没注意是多个文件,重新改了下
如果显示正确,第8行 删除 echo
作者: cxq00    时间: 2024-8-11 23:48

回复 8# aloha20200628


    FINDSTR: 无法从 list.txt 读取字符串
作者: aloha20200628    时间: 2024-8-12 00:02

回复 11# cxq00

8楼代码已订正,再试试吧

作者: 77七    时间: 2024-8-12 00:38

本帖最后由 77七 于 2024-8-12 00:40 编辑

送佛送到西...
再写一个,双击即可完成操作...
  1. @echo off
  2. rem 保存为ansi
  3. cd /d "E:\文件\文档汇总"
  4. set file=E:\文件\1.txt
  5. for /f "useback delims=" %%i in ("%file%") do (
  6. for /f "tokens=1*" %%a in ('find "%%i" *.txt') do (
  7. if "%%a" equ "----------" (
  8. set m=%%b
  9. ) else (
  10. call del "%%m%%" 2>nul
  11. )
  12. )
  13. )
  14. pause
复制代码

作者: cxq00    时间: 2024-8-12 09:41

回复 13# 77七


       还是不行
作者: qixiaobin0715    时间: 2024-8-12 10:07

本帖最后由 qixiaobin0715 于 2024-8-12 10:16 编辑

你把测试文本发到网盘上,便于大家测试用。
“关键字可能有三五个这样的”就没必要保存到文本里,直接放到代码里即可。
作者: 77七    时间: 2024-8-12 10:10

本帖最后由 77七 于 2024-8-12 10:16 编辑

回复 14# cxq00


   如果文本编码统一为utf-8,代码开头加一行 chcp 65001,并保存为utf-8编码。否则需要先转编码。
作者: cxq00    时间: 2024-8-12 10:19

回复 15# qixiaobin0715


    那也是可以的  ,直接放进代码里
作者: cxq00    时间: 2024-8-12 10:20

回复 16# 77七


    我试试,可能真是编码出的问题
作者: cxq00    时间: 2024-8-12 10:42

回复 16# 77七


    谢谢,编码出的问题




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