[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

这个问题不知道怎么办,被堵住了。
这是一个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。

  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
复制代码
bat小白,请多指教!谢谢!

TOP

下载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
复制代码

TOP

77七 发表于 2023-1-25 19:57


万分感谢,终于知道怎么办了。。。
感谢。

TOP

下载gawk(  )
hfxiang 发表于 2023-1-25 20:13

感谢提供gawk下载链接。感谢提供解答。

TOP

本帖最后由 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”呢?
感谢。。。

TOP

本帖最后由 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
复制代码


改成这样也行
bat小白,请多指教!谢谢!

TOP

回复  fantasyhpu

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




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



感谢。。。
我将测试文件放在了这里:
链接:https://pan.baidu.com/s/1OCWaAbMPQ_2vmn6gd2Q_Ug?pwd=1111
提取码:1111

TOP

本帖最后由 77七 于 2023-1-29 22:34 编辑

回复 8# fantasyhpu

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

批处理最好保存为ansi编码
bat小白,请多指教!谢谢!

TOP

本帖最后由 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“吗?
感谢。。。

TOP

本帖最后由 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
复制代码
bat小白,请多指教!谢谢!

TOP

回复  fantasyhpu


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


感谢您的回复。您的批处理代码完全解决了问题,对上面出问题的文本(行结束符不是CR+LF,而是CR)也能很好的找到期望的结果。
再次感谢。。。

TOP

这样可行不
  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
复制代码

TOP

返回列表