标题: [文本处理] 怎么用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字符全集,可以轻松拿下...
代码如下,用楼主示例文件测试通过- ::下式预览结果
- chcp 437>nul&more tone.cfg|findstr /ilc:".wtg"
- ::下式将结果定向到文件
- 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)时结果不准确- #?&cls&pause&powershell -c "type -literalpath '%~f0'|out-string|iex"&pause&exit
-
- #将 tone.cfg 改为 *.cfg 可批量处理
- $f=gci 'tone.cfg'
-
- $cd=[text.encoding]::GetEncoding('iso-8859-1')
- $f|%{
- $str=""
- $file=[io.fileinfo]$_
- $str=[io.file]::ReadAllText($file.fullname,$cd)
- $str=(($str -split '\u0000')|?{$_ -match '.wtg$'}) -join "`r`n"
- [io.file]::WriteAllBytes($file.directoryname+"\_new_"+$file.name,$cd.getbytes($str))
- [console]::writeline("has been save to file : "+$file.directoryname+"\_new_"+$file.name)
- }
复制代码
作者: 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 )组合实现如下:- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |