回复 5# 40252492
保存为bat文件,放在处理文件目录中.
测试前务必备份文件- @Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
- <#
- sid:每节的段编号
- offset:置后N段设置N,前置N段设置为-N,0为删除sid指定的段
- #>
- $sid=3;#段落编号
- $offset=2;#偏移距离,正数为后移,负数为前移,0为删除
-
- #===================================
- $files=dir *.txt -Recurse;
- foreach($txt_file in $files)
- {
-
-
- $text = type $txt_file -ReadCount 0;
- [System.Collections.ArrayList] $result=@();
- [System.Collections.ArrayList] $data=@();
- [System.Collections.ArrayList] $passage=@();
- $count=$text.Count;
- $counter=0;
- while($counter -le $count)
- {
- $line=$text[$counter++];
-
- if($line -notmatch '-')
- {
- if($passage)
- {
- [void]$data.Add($passage);
- $passage=@();
- }
-
- if($data)
- {
- $val=$data[$sid-1];
- switch($offset)
- {
- 0 {$data.RemoveAt($sid-1);break;}
- default {$data.RemoveAt($sid-1);$data.Insert($sid+$offset-1,$val);}
- }
- [void] $result.Add($data);
- $data=@();
- }
- [void] $result.Add($line);
-
- }
-
- elseif($line -match '- -')
- {
- if($passage)
- {
- [void]$data.Add($passage);
- $passage=@();
- }
-
- [void] $passage.Add($line);
-
- continue;
- }
- else
- {
- [void] $passage.Add($line);
-
- continue;
- }
- }
- [System.Collections.ArrayList] $output=@();
- foreach($item in $result)
- {
-
- foreach($idata in $item)
- {
- foreach($ipassage in $idata)
- {
-
- [void] $output.Add($ipassage)
- }
- }
-
- }
- [io.file]::WriteAllLines($txt_file,$output,[text.encoding]::Default);
- }
复制代码
|