标题: [文本处理] BAT脚本批量提取文本中的内容? [打印本页]
作者: 宝宝抱抱贝贝 时间: 2023-6-16 20:34 标题: BAT脚本批量提取文本中的内容?
大佬,帮一下小萌新,实在折腾不出来了!
想逐行读取文本内容,获取DzAPI_Map_HasMallItem关键字后面引号中的四位字母,输出到新文本,最好可以去重。
例:有一个txt内容如下:
if DzAPI_Map_HasMallItem(Player(0),"ZABC")==true or
DzAPI_Map_HasMallItem(Player(0),"QWER")==true or DzAPI_Map_HasMallItem(Player(0),"WEIY")==true then
DzAPI_Map_HasMallItem(Player(0),"WEIY")
输出:
ZABC
QWER
WEIY
作者: 77七 时间: 2023-6-16 21:27
本帖最后由 77七 于 2023-6-16 21:38 编辑
- @echo off
- (for /f tokens^=2^,4delims^=^" %%a in ('type "1.txt" ^|find "DzAPI_Map_HasMallItem"') do (
- if not defined _"%%a" (
- echo %%a
- set _"%%a"=1
- )
- if "%%b" neq "" if not defined _"%%b" (
- echo %%b
- set _"%%b"=1
- )
- ))>2.txt
复制代码
作者: jyswjjgdwtdtj 时间: 2023-6-16 21:30
本帖最后由 jyswjjgdwtdtj 于 2023-6-16 21:32 编辑
保存为vbs 如果获取不到 就把我标记了这里!的0换成-1或-2 总有一个是对的- set fso=createobject("scripting.filesystemobject")
- set f=fso.opentextfile("1.txt",1,false,0)'这里!
- a=f.readall
- set f=fso.createtextfile("2.txt",true)
- set re=new regexp
- re.global=true
- re.pattern="DzAPI_Map_HasMallItem\(.*?,""(.*?)""\)"
- for each i in re.execute(a)
- f.writeline i.submatches(0)
- next
复制代码
作者: pd1 时间: 2023-6-16 21:38
- <# :
- @echo off
- powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
- pause
- #>
- $a=get-content 1.txt
- $regex = [regex]"`"([A-Z]{4})`""
- $regex.Matches($a)|%{$_.Groups[1].Value}|Select-Object -Unique|Out-File -Append -FilePath 2.txt
复制代码
作者: qixiaobin0715 时间: 2023-6-17 09:10
本帖最后由 qixiaobin0715 于 2023-6-17 12:04 编辑
如果像你例子中那样,没有其它干扰项:- @echo off
- setlocal enabledelayedexpansion
- (for /f "delims=" %%i in (1.txt) do (
- set "str=%%i"
- set "str=!str:(= !"
- set "str=!str:)= !"
- for %%j in (!str!) do (
- if "%%j"=="DzAPI_Map_HasMallItem" (
- set n=0
- ) else if defined n (
- set /a n+=1
- if !n! equ 3 (
- set n=
- if not defined _%%~j (
- echo,%%~j
- set _%%~j=true
- )
- )
- )
- )
- ))>2.txt
- pause
复制代码
否则最好把你真实文本通过网盘传上来,让大家看看。
作者: hfxiang 时间: 2023-6-17 09:31
本帖最后由 hfxiang 于 2023-6-17 10:09 编辑
回复 1# 宝宝抱抱贝贝
如果不介意第3方工具,可用gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),指令如下:- gawk -F"=+" "/DzAPI_Map_HasMallItem/{for(i=1;i<=NF;i++)if(match($i,/^.*DzAPI_Map_HasMallItem\([^\(]+\([^\(]+\),\"(....)\"\).*$/,arr))if(!x[arr[1]]++)print arr[1]}" 1.txt>2.txt
复制代码
作者: 宝宝抱抱贝贝 时间: 2023-6-17 10:50
回复 5# qixiaobin0715
好的大佬
链接: https://pan.baidu.com/s/1LguIDIUVuCRiVLa98yF7zg?pwd=i3i3 提取码: i3i3 复制这段内容后打开百度网盘手机App,操作更方便哦
作者: 宝宝抱抱贝贝 时间: 2023-6-17 10:55
回复 6# hfxiang
下载了 但是打不开,管理员运行也不行。。。
作者: 宝宝抱抱贝贝 时间: 2023-6-17 10:59
回复 2# 77七
感谢大佬 好使 我研究下 学习学习
作者: hfxiang 时间: 2023-6-17 11:10
回复 7# 宝宝抱抱贝贝 - gawk -F"=+" "/DzAPI_Map_HasMallItem\(/{for(i=1;i<=NF;i++)if(match($i,/^.*DzAPI_Map_HasMallItem\([^\042]+\"(.+)\"\).*$/,arr))if(!x[arr[1]]++)print arr[1]}" war3map.j>out.txt
复制代码
作者: hfxiang 时间: 2023-6-17 11:12
回复 8# 宝宝抱抱贝贝
下载后把gawk.exe复制到 “C:\Windows\System32\”
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |