Board logo

标题: [文本处理] 批处理怎样删除不包含某个字符串的行? [打印本页]

作者: 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 编辑
  1. @echo off
  2. cd /d "%~dp0"
  3. set "str=202203"
  4. for /f "delims=" %%i in ('dir /b /s /a-d *.txt') do (
  5.         for /f "delims=" %%a in ('type "%%~fi" ^| find "%str%"') do (
  6.                 echo,%%a
  7.         )>>xxx.temp
  8.         if exist xxx.temp (
  9.                 move /y xxx.temp "%%~fi"
  10.         ) else (
  11.                 del "%%~fi"
  12.         )
  13. )
  14. pause
复制代码

每次使用前先备份
作者: hfxiang    时间: 2023-2-3 08:27

回复 1# 304802301

需确保所有文本均为保存为ANSI格式,下载sed( http://bcn.bathome.net/tool/4.8/sed.exe ),执行如下脚本
  1. @echo off
  2. rem 保存为ANSI格式
  3. cd /d "%~dp0"
  4. set "str=202203"
  5. 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

  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /b /a-d *.txt') do (
  3.     find "202203" "%%i">temp
  4.     move "temp" "%%i"
  5. )
复制代码

作者: Batcher    时间: 2023-2-4 09:02

回复 3# hfxiang


dir /b/s
sed -r
是否略显重复
作者: hfxiang    时间: 2023-2-4 09:22

回复 5# Batcher


    这个不重复,是解决子文件夹文件读取的折中办法




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