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

[文本处理] 怎么用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?勹鬆

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

TOP

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

TOP

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

TOP

回复 8# aloha20200628


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

TOP

本帖最后由 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

评分人数

    • 77七: 感谢分享技术 + 1

TOP

回复 4# Five66


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

TOP

回复 5# Batcher

要提取的字符串 在百度网盘 文件名tone.cfg:
链接:https://pan.baidu.com/s/1QooJO-p4Ew2kAqYZ0EgPvw
提取码:9898

TOP

回复 3# smluo1028


    请找几个文件打包上传到网盘,以便测试代码。因为文件中有些特殊字符是无法在任何网页上正确显示的。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

TOP

回复 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

TOP

回复 1# smluo1028


    请找几个wtg文件打包上传到网盘,以便测试代码。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表