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

[文本处理] 批处理如何单个字符解析文本文档?

背景:有个 KID 社某小说的剧本文件,剧本中角色名称在剧本中使用“【”和“】”包围。需要列出所有角色的名称。(单行可能会出现多个角色名称。剧本有多个文件。)
设想:使用 FOR 语句,单个字符判断。如果找到“【”符号,将从“【”(被找到的)开始单个字符判断并写入到变量,如果找到“】”符号则停止。当搜索完毕后所有角色名称删除重复对象。
草稿:
  1. @echo off
  2. for /f "delims=" %%a in (整个剧本.txt) do (
  3.         for /l %%b in (1,0,1) do (
  4.                 set c=%%b
  5.                 set /a d=c+1
  6.                 echo %%b
  7.                 echo %c%
  8.                 echo %d%
  9.         )
  10. )
复制代码
测试时遇到问题,第 4 行似乎执行错误,因为第 4 行错误导致第五行不能正常执行,第 7 行和第 8 行回显”ECHO 处于关闭状态“。
这样我就无法在嵌套 FOR /L 中获取取当前数值了。
简单来说我就是想把所有文本文档的正文中所有用【】包围的内容写入到另一个文件,每行一项。并删除重复项。
Hey Master! I am Mad Scientist. So cooool...

本帖最后由 zaqmlp 于 2019-5-19 14:35 编辑
  1. @echo off
  2. mode con lines=1000
  3. set info=互助互利,支付宝扫码头像,感谢赞助
  4. rem 有问题,可加QQ956535081及时沟通
  5. title %info%
  6. cd /d "%~dp0"
  7. powershell -NoProfile -ExecutionPolicy bypass ^
  8.     [System.Collections.ArrayList]$s=@();^
  9.     dir^|?{($_ -is [System.IO.FileInfo]) -and ($_.Extension -eq '.txt')}^|%%{^
  10.         $text=[IO.File]::ReadAllText($_.FullName, [Text.Encoding]::Default);^
  11.         $m=[regex]::matches($text,'【[^^】]+】');^
  12.         write-host ('---------'+$_.Name+'---------');^
  13.         $dic=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
  14.         foreach($it in $m){^
  15.             if(-not $dic.ContainsKey($it.value)){^
  16.                 write-host $it.value;^
  17.                 $dic.Add($it.value,'');^
  18.                 [void]$s.add($it.value);^
  19.             };^
  20.         };^
  21.     };^
  22.     write-host '=============total=============';^
  23.     $ss=@($s^|sort^|get-unique);$ss;^
  24.     [IO.File]::WriteAllLines('$total.log', $ss, [Text.Encoding]::Default);^
  25.     write-host '%info%' -ForegroundColor green;
  26. pause
复制代码
提供bat代写,为你省时省力省事,支付宝扫码头像支付
微信: unique2random

TOP

[attach]11976[/attach]

TOP

开启变量延迟扩展试试
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "delims=" %%a in (整个剧本.txt) do (
  4.     for /l %%b in (1,0,1) do (
  5.         set c=%%b
  6.         set /a d=c+1
  7.         echo %%b
  8.         echo !c!
  9.         echo !d!
  10.     )
  11. )
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

返回列表