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

[文本处理] 怎么用bat脚本提取指定字符串,一行中有多个指定字符串的

[复制链接]
发表于 2024-3-12 10:49:59 | 显示全部楼层 |阅读模式
要提取文件中的字符串 0.wtg  1.wtg  lowpoer.wtg 即 *.wtg 的字符串到新的文件中 并每占一行;每个 *.wtg 前后都有一个 空字符NUL (00H) 一行中会有多个 *.wtg

文件内容如下:
9:?   ?  ?  tone |}??  )     index.idx 緾  ?    0.wtg .忐怖  T    1.wtg Vf?  ?    3.wtg ?(±  ?    5.wtg Z?@?  P
  &#63733; lowpower.wtg &#63733;&#63733;&#63733;TIDXRb&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;   霖 拲 > 4'  &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;?? o?{?镸冇z:,崑酿誨Fj荷 嬞爃B杅?俰?憞嫚*侻中\彚L?.?=<汱Ko?勹鬆
发表于 2024-3-12 14:57:19 | 显示全部楼层
回复 1# smluo1028


    请找几个wtg文件打包上传到网盘,以便测试代码。
 楼主| 发表于 2024-3-12 21:43:49 | 显示全部楼层
回复 2# Batcher

这个不是找wtg文件的。而是要找文件里面的 *.wtg 字符串。把*.wtg 的字符串提取出来保存到新的文件里。
要提取的文件内容是:
w??   繨 ?  tone &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;[熜?  b  &#63733;  index.idx &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;蟃C   ?  &#63733;  0.wtg &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;,-??  T  &#63733;  1.wtg &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;x?   ^  &#63733;  2.wtg &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;?鰛  ?  &#63733;  3.wtg &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;V4G
  ?  &#63733;  4.wtg &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;?(“  ?  &#63733;  5.wtg &#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;&#63733;?X
发表于 2024-3-12 23:33:31 | 显示全部楼层
发表于 2024-3-13 08:24:04 | 显示全部楼层
回复 3# smluo1028


    请找几个文件打包上传到网盘,以便测试代码。因为文件中有些特殊字符是无法在任何网页上正确显示的。
 楼主| 发表于 2024-3-13 09:19:31 | 显示全部楼层
回复 5# Batcher

要提取的字符串 在百度网盘 文件名tone.cfg:
链接:https://pan.baidu.com/s/1QooJO-p4Ew2kAqYZ0EgPvw
提取码:9898
 楼主| 发表于 2024-3-13 09:22:18 | 显示全部楼层
回复 4# Five66


    复制在网页里是和原来的不一样 ,昨晚网盘没弄好
要提取的文件:
链接:https://pan.baidu.com/s/1QooJO-p4Ew2kAqYZ0EgPvw
提取码:9898
发表于 2024-3-13 10:25:38 | 显示全部楼层
本帖最后由 aloha20200628 于 2024-3-13 10:41 编辑

回复 3# smluo1028

关键是要用合适的字符集对付这种文件,码页437(美国地区字符集)可解读ascii字符全集,可以轻松拿下...
代码如下,用楼主示例文件测试通过

  1. ::下式预览结果
  2. chcp 437>nul&more tone.cfg|findstr /ilc:".wtg"
  3. ::下式将结果定向到文件
  4. chcp 437>nul&more tone.cfg|findstr /ilc:".wtg">"提取结果.txt"
复制代码

评分

参与人数 1技术 +1 收起 理由
77七 + 1 感谢分享

查看全部评分

 楼主| 发表于 2024-3-13 11:29:24 | 显示全部楼层
回复 8# aloha20200628


非常棒,这就是想要的结果。 :victory: 万分感谢啦 :handshake
自己搞了一天 没有搞出来。百度ai 讯飞 给的都没一个能提取的。不知道是ai不行还是描述的问题不对!!还是人利害些:victory:
发表于 2024-3-13 12:55:37 | 显示全部楼层
保存为ansi编码的bat
需要提取的字符串包含空字符(00H)时结果不准确

  1. #?&cls&pause&powershell -c "type -literalpath '%~f0'|out-string|iex"&pause&exit

  2. #将 tone.cfg 改为 *.cfg 可批量处理
  3. $f=gci   'tone.cfg'

  4. $cd=[text.encoding]::GetEncoding('iso-8859-1')
  5. $f|%{
  6. $str=""
  7. $file=[io.fileinfo]$_
  8. $str=[io.file]::ReadAllText($file.fullname,$cd)
  9. $str=(($str -split '\u0000')|?{$_ -match '.wtg$'}) -join "`r`n"
  10. [io.file]::WriteAllBytes($file.directoryname+"\_new_"+$file.name,$cd.getbytes($str))
  11. [console]::writeline("has been save to file : "+$file.directoryname+"\_new_"+$file.name)
  12. }
复制代码
发表于 2024-3-18 17:44:38 | 显示全部楼层
回复 1# smluo1028

第3方工具od( http://bcn.bathome.net/tool/od.exe )及gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe )组合实现如下:

  1. od -An -w1 -td1 tone.cfg|gawk "($0>31)&&($0<127){printf("%c",$0);A=$0+0;next}(($0=10)||($0=13)){if((A!=10)&&(A!=13))print"";A=$0+0;next}{printf("%c",32);A=32}"|gawk "/\.wtg/">"out.txt"
复制代码
发表于 2024-3-18 18:19:48 | 显示全部楼层
直接grep好像也行,不过参数里好像有个-z专门做这个
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 04:09 , Processed in 0.021286 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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