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

[文本处理] BAT脚本批量提取文本中的内容?

[复制链接]
发表于 2023-6-16 20:34:04 | 显示全部楼层 |阅读模式
大佬,帮一下小萌新,实在折腾不出来了!
想逐行读取文本内容,获取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
发表于 2023-6-16 21:27:06 | 显示全部楼层
本帖最后由 77七 于 2023-6-16 21:38 编辑
  1. @echo off
  2. (for /f tokens^=2^,4delims^=^" %%a in ('type "1.txt" ^|find "DzAPI_Map_HasMallItem"') do (
  3.         if not defined _"%%a" (
  4.                 echo %%a
  5.                 set _"%%a"=1
  6.         )
  7.         if "%%b" neq "" if not defined _"%%b" (
  8.                 echo %%b
  9.                 set _"%%b"=1
  10.         )
  11. ))>2.txt
复制代码
发表于 2023-6-16 21:30:47 | 显示全部楼层
本帖最后由 jyswjjgdwtdtj 于 2023-6-16 21:32 编辑

保存为vbs 如果获取不到 就把我标记了这里!的0换成-1或-2 总有一个是对的

  1. set fso=createobject("scripting.filesystemobject")
  2. set f=fso.opentextfile("1.txt",1,false,0)'这里!
  3. a=f.readall
  4. set f=fso.createtextfile("2.txt",true)
  5. set re=new regexp
  6. re.global=true
  7. re.pattern="DzAPI_Map_HasMallItem\(.*?,""(.*?)""\)"
  8. for each i in re.execute(a)
  9. f.writeline i.submatches(0)
  10. next
复制代码
发表于 2023-6-16 21:38:45 | 显示全部楼层
  1. <# :
  2. @echo off
  3. powershell -NoProfile -ExecutionPolicy bypass "Get-Content -literal '%~f0' |Out-String|Invoke-Expression"
  4. pause
  5. #>
  6. $a=get-content 1.txt
  7. $regex = [regex]"`"([A-Z]{4})`""
  8. $regex.Matches($a)|%{$_.Groups[1].Value}|Select-Object -Unique|Out-File -Append -FilePath 2.txt
复制代码
发表于 2023-6-17 09:10:53 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-6-17 12:04 编辑

如果像你例子中那样,没有其它干扰项:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. (for /f "delims=" %%i in (1.txt) do (
  4.     set "str=%%i"
  5.     set "str=!str:(= !"
  6.     set "str=!str:)= !"
  7.     for %%j in (!str!) do (
  8.         if "%%j"=="DzAPI_Map_HasMallItem" (
  9.             set n=0
  10.         ) else if defined n (
  11.             set /a n+=1
  12.             if !n! equ 3 (
  13.                 set n=
  14.                 if not defined _%%~j (
  15.                     echo,%%~j
  16.                     set _%%~j=true
  17.                 )
  18.             )
  19.         )
  20.     )
  21. ))>2.txt
  22. pause
复制代码
否则最好把你真实文本通过网盘传上来,让大家看看。
发表于 2023-6-17 09:31:20 | 显示全部楼层
本帖最后由 hfxiang 于 2023-6-17 10:09 编辑

回复 1# 宝宝抱抱贝贝

如果不介意第3方工具,可用gawk( http://bcn.bathome.net/tool/4.1.0/gawk.exe ),指令如下:

  1. 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:03 | 显示全部楼层
回复 5# qixiaobin0715

好的大佬
链接: https://pan.baidu.com/s/1LguIDIUVuCRiVLa98yF7zg?pwd=i3i3 提取码: i3i3 复制这段内容后打开百度网盘手机App,操作更方便哦
 楼主| 发表于 2023-6-17 10:55:10 | 显示全部楼层
回复 6# hfxiang


    下载了 但是打不开,管理员运行也不行。。。
 楼主| 发表于 2023-6-17 10:59:51 | 显示全部楼层
回复 2# 77七


    感谢大佬 好使 我研究下 学习学习
发表于 2023-6-17 11:10:07 | 显示全部楼层
回复 7# 宝宝抱抱贝贝

  1. 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
复制代码
发表于 2023-6-17 11:12:40 | 显示全部楼层
回复 8# 宝宝抱抱贝贝

下载后把gawk.exe复制到 “C:\Windows\System32\”
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-18 18:40 , Processed in 0.017190 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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