标题: [文本处理] 批处理如何把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 编辑
大致如此- for /f %%a in (list.txt) do (
- echo del *%%a*.*
- )
- pause
- 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
- @echo off
- rem 保存为ansi
- cd /d "%~dp0"
- set file=d:\1.txt
-
- for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- call :1 "%%i"
- )
- pause
- exit
-
- :1
- for /f "useback delims=" %%a in ("%file%") do (
- find "%%a" "%~1" 1>nul
- if not errorlevel 1 (
- del "%~1"
- echo find "%%a" del "%~1"
- exit /b
- )
- )
- 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 - @echo off
-
- set list="E:\文件\list*.txt"
- set dest="E:\文件\文档汇总"
-
- pushd %dest%
- for /f "usebackq tokens=* delims=" %%a in (` type %list% `) do (
- echo del *%%a*.*
- )
- popd
-
- pause
- exit/b
复制代码
看下输出 修改第8行
作者: aloha20200628 时间: 2024-8-11 23:43
本帖最后由 aloha20200628 于 2024-8-12 09:10 编辑
回复 6# cxq00
假设当前目录中的关键词列表文件为 1.lst
以下批处代码在当前目录下运行,将会删除 "E:\文件\文档汇总\" 子目录中包含 1.lst 所列关键词的 *.txt 文件
- @echo off &for /f "delims=" %%F in (
- 'dir /b/a-d E:\文件\文档汇总\*.txt'
- ) do findstr /limg:"1.lst" "E:\文件\文档汇总\%%F"&&del /q "E:\文件\文档汇总\%%F"
- 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 编辑
送佛送到西...
再写一个,双击即可完成操作...- @echo off
- rem 保存为ansi
- cd /d "E:\文件\文档汇总"
- set file=E:\文件\1.txt
-
- for /f "useback delims=" %%i in ("%file%") do (
- for /f "tokens=1*" %%a in ('find "%%i" *.txt') do (
- if "%%a" equ "----------" (
- set m=%%b
- ) else (
- call del "%%m%%" 2>nul
- )
- )
- )
- 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://bbs.bathome.net/) |
Powered by Discuz! 7.2 |