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

[文本处理] [已解决]批处理BAT如何判断关键词所在列并删除所在行?

[复制链接]
发表于 2014-2-17 23:49:29 | 显示全部楼层 |阅读模式
如附件,如何实现只判断“工作日期”这一列?目前判断是整一行中是否含有date.txt中的关键词

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2014-2-18 11:14:39 | 显示全部楼层
本帖最后由 battab 于 2014-2-18 11:20 编辑

回复 1# lijiehao

试试这个可以吗?
  1. @echo off&setlocal enabledelayedexpansion
  2. set n=0
  3. for /f "tokens=1-3" %%a in (bw.txt) do (
  4.         set/a n+=1
  5.         if "!n!"=="1" echo %%a %%b %%c
  6.         for /f "tokens=*" %%i in (date.txt) do (
  7.                 if %%i==%%a echo %%a %%b %%c
  8.         )
  9. )
  10. pause>nul       
复制代码
这个筛选出有关键词的行

评分

参与人数 1技术 +1 收起 理由
lijiehao + 1 非常感谢

查看全部评分

发表于 2014-2-18 11:38:41 | 显示全部楼层
本帖最后由 battab 于 2014-2-18 12:52 编辑

回复 1# lijiehao


    这个应该可以满足要求:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3" %%a in (bw.txt) do (
  3.         for /f "tokens=*" %%i in (date.txt) do (
  4.                 if %%i neq %%a echo %%a %%b %%c >>bw_new.txt
  5.         )
  6. )
  7. pause>nul
复制代码
 楼主| 发表于 2014-2-18 12:45:09 | 显示全部楼层
回复 3# battab


    非常感谢,目前测试确实可以了
发表于 2014-2-18 13:01:01 | 显示全部楼层
回复 3# battab


没有必要在二层for循环里面重复的读取date.txt
一次就够了
  1. @echo off
  2. set /p str=<date.txt
  3. (for /f "tokens=1-3" %%a in (bw.txt) do (
  4.     if %str% neq %%a echo %%a %%b %%c
  5. ))>bw_new.txt
复制代码
发表于 2014-2-18 13:03:53 | 显示全部楼层
  1. gawk "NR==FNR{str=$0}NR>FNR{if($1!=str)print}" date.txt bw.txt > bw_new.txt
复制代码
发表于 2014-2-18 13:18:36 | 显示全部楼层
回复 5# Batcher


    如果date里不止一行的话,这个还行吗?
发表于 2014-2-18 13:40:34 | 显示全部楼层
回复 7# zhanglei1371


    set /p 只能获取第一行
 楼主| 发表于 2014-2-18 17:03:27 | 显示全部楼层
本帖最后由 lijiehao 于 2014-2-18 17:05 编辑

回复 5# Batcher


    谢谢大神多次的帮助!现在date里面只有一个日期,如果有多个日期存在呢?如

20140218
2014.02.18
20140219
2014.02.19
......
20140225
2014.02.25

此外,为什么只能支持前面3列,如果后面还有几列呢?

惭愧,水平太差,只是为了提高工作效率,不停搜索,不停修改人家的代码
发表于 2014-2-18 17:06:28 | 显示全部楼层
回复 9# lijiehao


    2楼和3楼的代码都不行是吗?
 楼主| 发表于 2014-2-18 17:38:49 | 显示全部楼层
回复 10# Batcher


    只支持前三列,第4列以后的全都没办法输出
发表于 2014-2-18 18:04:15 | 显示全部楼层
回复 11# lijiehao


    把代码里面的 1-3 改成 1-2*

评分

参与人数 1技术 +1 收起 理由
lijiehao + 1 谢谢高手的指点

查看全部评分

 楼主| 发表于 2014-2-25 09:01:28 | 显示全部楼层
回复 12# Batcher


    非常感谢!
发表于 2014-2-25 09:48:32 | 显示全部楼层
回复 13# lijiehao


    问题解决后,请编辑顶楼帖子在标题前面注明[已解决],并给回答者加分。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 03:13 , Processed in 0.021162 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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