批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程
[批处理文件精品]批处理版照片整理器[批处理文件精品]纯批处理备份&还原驱动在线第三方下载
返回列表 发帖

[文本处理] [已解决]批处理如何保留文本中2010年份之后的行?

如何保留文本中2010年份之后的行,  2010年之前的行全删除

文本为Tab 格式分隔

文本内容如下:

TW1213        2022-09-30        21.000000
TW1215        2018-03-12        105019.000000
TW1216        2015-09-18        2287976.000000
TW1217        2021-02-11        30811.000000
TW1218        2022-09-13        12812.000000
TW1219        2017-04-18        21541.000000
TW1220        2006-09-22        13248.000000
TW1225        2022-09-13        1547.000000
TW1227        2009-02-05        58680.000000
TW1229        2001-09-13        157778.000000
TW1231        2022-07-01        5556.000000
TW1232        2003-09-13        1924.000000
TW1233        2004-09-13        4725.000000
TW1234        1999-09-07        22020.000000
TW1235        2007-05-13        156.000000
TW1236        2022-09-03        434.000000

  1. @echo off
  2. cd /d "%~dp0"
  3. (
  4. for /f "tokens=1-2* delims= " %%A in (a.txt) do (
  5.   for /f "tokens=1 delims=-" %%D in ("%%B") do (
  6.     if %%B geq 2010 echo %%A %%B %%C
  7.   )
  8. )
  9. )>b.txt
  10. pause
复制代码
1

评分人数

    • KLL: 乐于助人技术 + 1
微信:flashercs
QQ:49908356

TOP

假设a.txt为输入文件,b.txt为输出文件,可在命令行正直接执行:
  1. (for /f "tokens=1-2*" %a in (a.txt) do @for /f "tokens=1 delims=-" %d in ("%b") do @if %d GTR 2010 @echo %a %b %c)>b.txt
复制代码
即可
1

评分人数

    • KLL: 乐于助人技术 + 1

TOP

运行后正确 谢谢先进指导

TOP

  1. findstr /rc:" 20[12][0-9]-" a.txt>b.txt
复制代码

TOP

回复 1# KLL
  1. findstr "2[0-9][1-9][0-9]-" 1.txt > 2.txt
复制代码
【批处理在线视频分享】http://bbs.bathome.net/thread-31727-1-1.html
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html

我帮忙写的代码不需要付钱,也不用找我要支付宝或微信账号。如果一定要给,请在群里给大家吧。

TOP

回复 1# KLL


经测试,单个for也能实现
  1. (for /f "tokens=1-2* delims=- " %%a in (a.txt) do if %%b GTR 2010 echo %%a %%b-%%c)>b.txt
复制代码

TOP

  1. findstr "\<20[1-9][0-9]- \<2[1-9][0-9][0-9]- \<[3-9][0-9][0-9][0-9]-" a.txt > b.txt
复制代码
大于等于2010的4位数年份,分三段:2010~2099, 2100~2999, 3000~9999

TOP

回复 8# WHY
\<用的妙,避开了空白字符的麻烦。

TOP

回复 9# qixiaobin0715


    这种办法只能作为备选方案。如果要匹配1986~2022年之间的年份,要分很多段,远没有 for + if 来的直接。

TOP

回复 10# WHY
确实如此,使用判断语句逻辑上也较为清晰。不过我还是想试试findstr,1986~2022之间可分为4段:
  1. findstr "\<198[6-9]- \<199[0-9]- \<20[01][0-9]- \<202[0-2]-" a.txt>b.txt
复制代码

TOP

返回列表