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

[文本处理] bat脚本怎样判断文本 提取指定文本?

[复制链接]
发表于 2022-3-24 17:47:49 | 显示全部楼层 |阅读模式
bat判断文本 提取指定文本???

例如:文本a.txt

a----ba----c----d
a----b----ca----d
a----d----c-----d
a----b----cA----d
a----bA----c----d
我们----哈我们-----c----d
购买----哈-----c购买----d
辅导----地方----发发----d

生成b.txt

a----ba----c----d
a----b----ca----d
a----b----cA----d
a----bA----c----d
我们----哈我们-----c----d
购买----哈-----c购买----d


就是:1----2----3----4     四部分  2和3里面 如果任何一个部分 包含 部分1 就记录b.txt   英文要大小写忽略
发表于 2022-3-25 08:44:49 | 显示全部楼层
回复 1# idc878787


    在这个例子里面 a----d----c-----d 这一行不符合哪个要求被删掉了?
发表于 2022-3-25 09:11:36 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2022-3-25 09:17 编辑

发现有很多求助帖子中例子太随意,大多都是自己凭空编写的且不典型。有人根据提供的例子写了代码,就会说这里不行那里不行,实际上却是他自己没有说清楚。提供的例子或示范文本最好是实际工作中真实的东西或片段,这样才会尽可能避免出现诸多问题。
发表于 2022-3-25 09:41:25 | 显示全部楼层
回复 3# qixiaobin0715

楼主是这个问题
for /f "tokens=1,2,3,4 delims=-" %%a in (a.txt) do (
忽略大小写,判断%%b和%%c中是否包含字符串%%a,有则写进b.txt
)
我在想,不用findstr的情况下,批处理怎么写
发表于 2022-3-25 09:58:58 | 显示全部楼层
回复 4# for_flr
我想是这样吧:
  1. set str1=%%b
  2. set str2=%%c
  3. if /i not "!str1:%%a=!" =="!str1!" (
  4. echo,...
  5. ) else if /i not "!str2:%%a=!" =="!str2!" (
  6. echo,...
  7. )
复制代码
发表于 2022-3-25 10:03:15 | 显示全部楼层
回复 4# for_flr
这样呢
  1. set str=%%b%%c
  2. if /i not "!str:%%a=!" =="!str!" echo,...
复制代码

评分

参与人数 1技术 +1 收起 理由
for_flr + 1 变量替换刚好不区分大小写,很行

查看全部评分

发表于 2022-3-25 12:01:17 | 显示全部楼层
回复 1# idc878787


请参考Q-04和Q-05把bat文件和txt文件都保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. (for /f "tokens=1-4 delims=-" %%a in ('type "a.txt"') do (
  5.     set "str=%%b%%c"
  6.     if /i "!str:%%a=!" neq "!str!" (
  7.         echo %%a----%%b----%%c----%%d
  8.     )
  9. ))>"b.txt"
复制代码
 楼主| 发表于 2022-3-25 13:26:33 | 显示全部楼层
3q   
 楼主| 发表于 2022-12-19 10:35:10 | 显示全部楼层
回复 7# Batcher


    有没有更快的处理方式,这个百万数据处理1天都还没好?
发表于 2022-12-19 11:51:26 | 显示全部楼层
如果数据量很大,建议用gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),效率会很高
执行以下指令之前,请确保a.txt为ANSI编码

  1. gawk -F"-+" -vIGNORECASE=1 "{if($2~$1||$3~$1)print}" a.txt>b.txt
复制代码
 楼主| 发表于 2022-12-19 12:55:19 | 显示全部楼层
本帖最后由 idc878787 于 2022-12-19 13:22 编辑

回复 10# hfxiang


     数据中  如果含有这个符号  就会丢数据?
发表于 2022-12-19 14:47:14 | 显示全部楼层
会不会有下面这个情况呢 就是数据第一段不是个位数 例如 %%a=XX
如此情况下,上面代码应该出错吧
 楼主| 发表于 2022-12-19 15:23:41 | 显示全部楼层
回复 12# terse


    7楼的代码都可以   就是处理数据多的时候   慢        10楼的代码就是 处理文本含有    这符号的 时候  就丢数据了  不处理了
发表于 2022-12-19 17:00:17 | 显示全部楼层
回复 11# idc878787


   
请确保a.txt为ANSI编码格式,该脚本方能生效
发表于 2022-12-19 17:44:49 | 显示全部楼层
本帖最后由 hfxiang 于 2022-12-19 18:03 编辑

回复 11# idc878787


    经测试,如果含“”字符,需要用 Ruby(https://rubyinstaller.org/downloads/)中附带的 gawk 方能有效处理(脚本不变)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 10:12 , Processed in 0.021834 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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