[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理怎样删除不包含某个字符串的行?

某个路径下有好多txt,有些可能在子路径下,需要循环读取所有的txt,并删除不包含202203的内容(保留含有202203的行,删除不含202203的行,202203是变量,后续可以自己设置)
比如第一行内容是【akjwdoqiw202203阿克苏就怕】,包含202203,这一行就保留,不删除。
比如第二行内容是【aosjidpiw-09-palsldjq202200】,不包含202203,这一行就删除掉。
大佬们看看有什么bat能够稍微高效的来批处理,谢谢

回复 5# Batcher


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

TOP

回复 3# hfxiang


dir /b/s
sed -r
是否略显重复
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

  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. )
复制代码

TOP

回复 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"
复制代码

TOP

本帖最后由 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
复制代码

每次使用前先备份
bat小白,请多指教!谢谢!

TOP

返回列表