找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 23929|回复: 10

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

[复制链接]
发表于 2022-9-18 15:29:00 | 显示全部楼层 |阅读模式
如何保留文本中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
发表于 2022-9-18 17:27:01 | 显示全部楼层
  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技术 +1 收起 理由
KLL + 1 乐于助人

查看全部评分

发表于 2022-9-18 17:38:50 | 显示全部楼层
假设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技术 +1 收起 理由
KLL + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-9-18 21:12:55 | 显示全部楼层
运行后正确 谢谢先进指导
发表于 2022-9-19 09:36:22 | 显示全部楼层
  1. findstr /rc:"        20[12][0-9]-" a.txt>b.txt
复制代码
发表于 2022-9-19 09:38:49 | 显示全部楼层
回复 1# KLL
  1. findstr "2[0-9][1-9][0-9]-" 1.txt > 2.txt
复制代码
发表于 2022-9-19 10:30:28 | 显示全部楼层
回复 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
复制代码
发表于 2022-9-19 12:55:39 | 显示全部楼层
  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
发表于 2022-9-19 15:04:31 | 显示全部楼层
回复 8# WHY
\<用的妙,避开了空白字符的麻烦。
发表于 2022-9-19 19:12:16 | 显示全部楼层
回复 9# qixiaobin0715


    这种办法只能作为备选方案。如果要匹配1986~2022年之间的年份,要分很多段,远没有 for + if 来的直接。
发表于 2022-9-20 09:40:23 | 显示全部楼层
回复 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 14:45 , Processed in 0.020482 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表