标题: [文本处理] 批处理怎样删除不包含某个字符串的行? [打印本页]
作者: 304802301 时间: 2023-2-2 21:36 标题: 批处理怎样删除不包含某个字符串的行?
某个路径下有好多txt,有些可能在子路径下,需要循环读取所有的txt,并删除不包含202203的内容(保留含有202203的行,删除不含202203的行,202203是变量,后续可以自己设置)
比如第一行内容是【akjwdoqiw202203阿克苏就怕】,包含202203,这一行就保留,不删除。
比如第二行内容是【aosjidpiw-09-palsldjq202200】,不包含202203,这一行就删除掉。
大佬们看看有什么bat能够稍微高效的来批处理,谢谢
作者: 77七 时间: 2023-2-2 23:41
本帖最后由 77七 于 2023-2-2 23:43 编辑
- @echo off
- cd /d "%~dp0"
- set "str=202203"
- for /f "delims=" %%i in ('dir /b /s /a-d *.txt') do (
- for /f "delims=" %%a in ('type "%%~fi" ^| find "%str%"') do (
- echo,%%a
- )>>xxx.temp
- if exist xxx.temp (
- move /y xxx.temp "%%~fi"
- ) else (
- del "%%~fi"
- )
- )
- pause
复制代码
每次使用前先备份
作者: hfxiang 时间: 2023-2-3 08:27
回复 1# 304802301
需确保所有文本均为保存为ANSI格式,下载sed( http://bcn.bathome.net/tool/4.8/sed.exe ),执行如下脚本- @echo off
- rem 保存为ANSI格式
- cd /d "%~dp0"
- set "str=202203"
- for /f "delims=" %%a in ('echo;%cd%^&dir /b/s/ad') do sed -i.bak -r -n "/%str%/p" "%%~a\*.txt"
复制代码
作者: qixiaobin0715 时间: 2023-2-3 08:27
- @echo off
- for /f "delims=" %%i in ('dir /s /b /a-d *.txt') do (
- find "202203" "%%i">temp
- move "temp" "%%i"
- )
复制代码
作者: Batcher 时间: 2023-2-4 09:02
回复 3# hfxiang
dir /b/s
sed -r
是否略显重复
作者: hfxiang 时间: 2023-2-4 09:22
回复 5# Batcher
这个不重复,是解决子文件夹文件读取的折中办法
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |