标题: [文本处理] 批处理如何单个字符解析文本文档? [打印本页]
作者: 化璟钰 时间: 2019-5-19 13:53 标题: 批处理如何单个字符解析文本文档?
背景:有个 KID 社某小说的剧本文件,剧本中角色名称在剧本中使用“【”和“】”包围。需要列出所有角色的名称。(单行可能会出现多个角色名称。剧本有多个文件。)
设想:使用 FOR 语句,单个字符判断。如果找到“【”符号,将从“【”(被找到的)开始单个字符判断并写入到变量,如果找到“】”符号则停止。当搜索完毕后所有角色名称删除重复对象。
草稿:- @echo off
- for /f "delims=" %%a in (整个剧本.txt) do (
- for /l %%b in (1,0,1) do (
- set c=%%b
- set /a d=c+1
- echo %%b
- echo %c%
- echo %d%
- )
- )
复制代码
测试时遇到问题,第 4 行似乎执行错误,因为第 4 行错误导致第五行不能正常执行,第 7 行和第 8 行回显”ECHO 处于关闭状态“。
这样我就无法在嵌套 FOR /L 中获取取当前数值了。
简单来说我就是想把所有文本文档的正文中所有用【】包围的内容写入到另一个文件,每行一项。并删除重复项。
作者: zaqmlp 时间: 2019-5-19 14:13
本帖最后由 zaqmlp 于 2019-5-19 14:35 编辑
- @echo off
- mode con lines=1000
- set info=互助互利,支付宝扫码头像,感谢赞助
- rem 有问题,可加QQ956535081及时沟通
- title %info%
- cd /d "%~dp0"
- powershell -NoProfile -ExecutionPolicy bypass ^
- [System.Collections.ArrayList]$s=@();^
- dir^|?{($_ -is [System.IO.FileInfo]) -and ($_.Extension -eq '.txt')}^|%%{^
- $text=[IO.File]::ReadAllText($_.FullName, [Text.Encoding]::Default);^
- $m=[regex]::matches($text,'【[^^】]+】');^
- write-host ('---------'+$_.Name+'---------');^
- $dic=New-Object 'System.Collections.Generic.Dictionary[string,string]';^
- foreach($it in $m){^
- if(-not $dic.ContainsKey($it.value)){^
- write-host $it.value;^
- $dic.Add($it.value,'');^
- [void]$s.add($it.value);^
- };^
- };^
- };^
- write-host '=============total=============';^
- $ss=@($s^|sort^|get-unique);$ss;^
- [IO.File]::WriteAllLines('$total.log', $ss, [Text.Encoding]::Default);^
- write-host '%info%' -ForegroundColor green;
- pause
复制代码
作者: 523066680 时间: 2019-5-19 14:28
[attach]11976[/attach]
作者: Batcher 时间: 2019-5-19 18:05
开启变量延迟扩展试试- @echo off
- setlocal enabledelayedexpansion
- for /f "delims=" %%a in (整个剧本.txt) do (
- for /l %%b in (1,0,1) do (
- set c=%%b
- set /a d=c+1
- echo %%b
- echo !c!
- echo !d!
- )
- )
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |