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

[文本处理] 批处理如何从TXT文本中提取某个字符?

[复制链接]
发表于 2023-1-25 19:33:22 | 显示全部楼层 |阅读模式
这个问题不知道怎么办,被堵住了。
这是一个txt文本:

  1. this is a test.

  2. COM6......

  3. The number 2463 tool is on COM6, wait...
复制代码
想提取出来“The number 2463 tool is on COM6”中,COM6中的“6”,将这个“6”显示在命令行窗口中,不知该怎么办?
系统是win10。
发表于 2023-1-25 19:57:58 | 显示全部楼层
  1. @echo off
  2. for /f "tokens=7 delims=, " %%a in ('type 文本.txt ^| find "The number"') do (
  3.         set str=%%a
  4. )
  5. echo %str:COM=%
  6. pause
复制代码
发表于 2023-1-25 20:13:17 | 显示全部楼层
下载gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe

  1. gawk "/The number 2463 tool is on COM/{print gensub(/^The number 2463 tool is on COM(.).*$/,"\\1","g")}" 文本.txt
复制代码
 楼主| 发表于 2023-1-25 22:14:27 | 显示全部楼层
77七 发表于 2023-1-25 19:57


万分感谢,终于知道怎么办了。。。
感谢。
 楼主| 发表于 2023-1-25 22:56:39 | 显示全部楼层
下载gawk(  )
hfxiang 发表于 2023-1-25 20:13

感谢提供gawk下载链接。感谢提供解答。
 楼主| 发表于 2023-1-29 20:58:01 | 显示全部楼层
本帖最后由 fantasyhpu 于 2023-1-29 21:05 编辑
77七 发表于 2023-1-25 19:57


这几天在使用这段批处理时出现一个问题:
若“文本.txt”中的内容,昨天和今天的不一样,例如昨天的内容是:
  1. this is a test.

  2. COM6......

  3. The number 2463 tool is on COM6, wait...
复制代码
则用您给的方法找到了“The number 2463 tool is on COM6”中,COM后面的“6”。
但是今天“文本.txt”的内容变为:
  1. this is a test.
  2. this is another test.
  3. COM7......
  4. COM8......
  5. The number 2463 tool is on COM6, wait...
  6. this is another test.
复制代码
用原先的批处理时,就找不到COM6中的“6”了。

我尝试将
  1. for /f "tokens=7 delims=,
复制代码
中tokens的值从7改为其它值,比如6、3等,但治标不治本,只要“文本.txt”内容不一样了,就找不到COM6中的“6”了。
无论“文本.txt”中的内容如何更改,但是“The number 2463 tool is on COM”是永远存在的,对这种情况,怎样修改您给出的批处理程序,提取紧挨着“The number 2463 tool is on COM”后面的“6”呢?
感谢。。。
发表于 2023-1-29 21:09:23 | 显示全部楼层
本帖最后由 77七 于 2023-1-29 21:26 编辑

回复 6# fantasyhpu

我这边测试正常
  1. 'type 文本.txt ^| find "The number"'
复制代码
意为:“打印” 包含 The number 的那一行




  1. "tokens=7 delims=, "
复制代码
意为:以“,”和“ ”(空格)分割,取第7个“字符串”



我把文本用引号括了一下,重新复制代码,
注意 批处理保存为ansi编码格式
  1. @echo off
  2. for /f "tokens=7 delims=, " %%a in ('type "文本.txt" ^| find "The number"') do (
  3.         set str=%%a
  4. )
  5. echo %str:COM=%
  6. pause
复制代码



如果还是不行,把你用的批处理和文本原件打包上传到网盘,我再来测试一下

21:26更新
  1. @echo off
  2. for /f "tokens=7 delims=, " %%a in ('type "文本.txt" ^| find "The number 2463 tool is on"') do (
  3.         set str=%%a
  4. )
  5. echo %str:COM=%
  6. pause
复制代码


改成这样也行
 楼主| 发表于 2023-1-29 22:23:38 | 显示全部楼层
回复  fantasyhpu

我这边测试正常意为:“打印” 包含 The number 的那一行




意为:以“,”和 ...
77七 发表于 2023-1-29 21:09



感谢。。。
我将测试文件放在了这里:
链接:https://pan.baidu.com/s/1OCWaAbMPQ_2vmn6gd2Q_Ug?pwd=1111
提取码:1111
发表于 2023-1-29 22:31:29 | 显示全部楼层
本帖最后由 77七 于 2023-1-29 22:34 编辑

回复 8# fantasyhpu

你的文本行结束符有点问题,改为(CR+LF) 这个试试

批处理最好保存为ansi编码
 楼主| 发表于 2023-1-30 15:17:29 | 显示全部楼层
本帖最后由 fantasyhpu 于 2023-1-30 15:22 编辑
回复  fantasyhpu

你的文本行结束符有点问题,改为(CR+LF) 这个试试

批处理最好保存为ansi编码
77七 发表于 2023-1-29 22:31


感谢提醒。经过反复对比,发现确实是文本行结束符有问题。正确的行结束符应该是CR+LF,但是本文中有些行结束符只为CR:

无法上传图片与附件,将图片传到这里了:
链接:https://pan.baidu.com/s/18SwGetmnjQ8ZY8hb_Adayg?pwd=1111
提取码:1111

请问对于这类有毛病的文本,有办法将”ATmega328P on COM“定位出来,提取出紧跟着它的那个字符”6“吗?
感谢。。。
发表于 2023-1-30 17:15:11 | 显示全部楼层
本帖最后由 77七 于 2023-1-30 18:15 编辑

回复 10# fantasyhpu


   我也是第一次遇到这种状况,你的网盘文件删了,我没法测试,试试这样行不
  1. @echo off
  2. for /f "delims=" %%a in ('type "文本.txt" ^| find "ATmega328P on COM"') do (
  3.         set "str=%%a"
  4. )
  5. set "str=%str:*ATmega328P on COM=%"
  6. for /f "tokens=1" %%a in ("%str%") do (
  7.         set str=%%a
  8. )
  9. echo %str%
  10. pause
复制代码
 楼主| 发表于 2023-1-30 18:56:00 | 显示全部楼层
回复  fantasyhpu


   我也是第一次遇到这种状况,你的网盘文件删了,我没法测试,试试这样行不
77七 发表于 2023-1-30 17:15


感谢您的回复。您的批处理代码完全解决了问题,对上面出问题的文本(行结束符不是CR+LF,而是CR)也能很好的找到期望的结果。
再次感谢。。。
发表于 2023-1-30 19:31:16 | 显示全部楼层
这样可行不
  1. @echo off
  2. for /f "delims=" %%a in ('findstr /ic:"The number 2463 tool is on COM"  1.txt') do set "str=%%a"
  3. for /f "delims=, " %%a in ("%str:*The number 2463 tool is on COM=%") do echo %%a
  4. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-19 05:11 , Processed in 0.030922 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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