Board logo

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

作者: smluo1028    时间: 2024-3-12 10:49     标题: 怎么用bat脚本提取指定字符串,一行中有多个指定字符串的

要提取文件中的字符串 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
   lowpower.wtg TIDXRb   霖 拲 > 4'  ?? o?{镸冇z:,崑酿誨Fj荷 嬞爃B杅?俰?憞嫚*侻中\彚L?.?=<汱Ko?勹鬆
作者: Batcher    时间: 2024-3-12 14:57

回复 1# smluo1028


    请找几个wtg文件打包上传到网盘,以便测试代码。
作者: smluo1028    时间: 2024-3-12 21:43

回复 2# Batcher

这个不是找wtg文件的。而是要找文件里面的 *.wtg 字符串。把*.wtg 的字符串提取出来保存到新的文件里。
要提取的文件内容是:
w?   繨 ?  tone [熜?  b    index.idx 蟃C   ?    0.wtg ,-?  T    1.wtg x   ^    2.wtg 鰛  ?    3.wtg V4G
  ?    4.wtg ?(“  ?    5.wtg ?X
作者: Five66    时间: 2024-3-12 23:33


作者: Batcher    时间: 2024-3-13 08:24

回复 3# smluo1028


    请找几个文件打包上传到网盘,以便测试代码。因为文件中有些特殊字符是无法在任何网页上正确显示的。
作者: smluo1028    时间: 2024-3-13 09:19

回复 5# Batcher

要提取的字符串 在百度网盘 文件名tone.cfg:
链接:https://pan.baidu.com/s/1QooJO-p4Ew2kAqYZ0EgPvw
提取码:9898
作者: smluo1028    时间: 2024-3-13 09:22

回复 4# Five66


    复制在网页里是和原来的不一样 ,昨晚网盘没弄好
要提取的文件:
链接:https://pan.baidu.com/s/1QooJO-p4Ew2kAqYZ0EgPvw
提取码:9898
作者: aloha20200628    时间: 2024-3-13 10:25

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

作者: smluo1028    时间: 2024-3-13 11:29

回复 8# aloha20200628


非常棒,这就是想要的结果。 :victory: 万分感谢啦 :handshake
自己搞了一天 没有搞出来。百度ai 讯飞 给的都没一个能提取的。不知道是ai不行还是描述的问题不对!!还是人利害些:victory:
作者: Five66    时间: 2024-3-13 12:55

保存为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. }
复制代码

作者: hfxiang    时间: 2024-3-18 17:44

回复 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"
复制代码

作者: wanghan519    时间: 2024-3-18 18:19

直接grep好像也行,不过参数里好像有个-z专门做这个





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2