[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
每个skel:内的段是单独编号呢,还是所有skel:的段是统一连续编号?
QQ 33892006

TOP

回复 5# 40252492
保存为bat文件,放在处理文件目录中.
测试前务必备份文件
  1. @Powershell "& {[ScriptBlock]::Create("'#' + ([io.file]::ReadAllText('%~f0',[text.encoding]::Default))").Invoke()}" & pause & exit
  2. <#
  3.     sid:每节的段编号
  4.     offset:置后N段设置N,前置N段设置为-N,0为删除sid指定的段
  5. #>
  6. $sid=3;#段落编号
  7. $offset=2;#偏移距离,正数为后移,负数为前移,0为删除
  8. #===================================
  9. $files=dir *.txt -Recurse;
  10. foreach($txt_file in $files)
  11. {
  12.     $text = type $txt_file -ReadCount 0;
  13.     [System.Collections.ArrayList] $result=@();
  14.     [System.Collections.ArrayList] $data=@();
  15.     [System.Collections.ArrayList] $passage=@();
  16.     $count=$text.Count;
  17.     $counter=0;
  18.     while($counter -le $count)
  19.     {
  20.         $line=$text[$counter++];
  21.         if($line -notmatch '-')
  22.         {
  23.             if($passage)
  24.             {
  25.                 [void]$data.Add($passage);
  26.                 $passage=@();
  27.             }
  28.             if($data)
  29.             {
  30.                 $val=$data[$sid-1];
  31.                 switch($offset)
  32.                 {
  33.                     0 {$data.RemoveAt($sid-1);break;}
  34.                     default {$data.RemoveAt($sid-1);$data.Insert($sid+$offset-1,$val);}
  35.                 }
  36.                 [void] $result.Add($data);
  37.                 $data=@();
  38.             }
  39.             [void] $result.Add($line);
  40.         
  41.         }
  42.    
  43.         elseif($line -match '- -')
  44.         {
  45.             if($passage)
  46.             {
  47.                 [void]$data.Add($passage);
  48.                 $passage=@();
  49.             }
  50.         
  51.             [void] $passage.Add($line);
  52.         
  53.             continue;
  54.         }
  55.         else
  56.         {
  57.             [void] $passage.Add($line);
  58.         
  59.             continue;
  60.         }   
  61.     }
  62.     [System.Collections.ArrayList] $output=@();
  63.     foreach($item in $result)
  64.     {
  65.         
  66.         foreach($idata in $item)
  67.         {
  68.             foreach($ipassage in $idata)
  69.             {
  70.                 [void] $output.Add($ipassage)
  71.             }
  72.         }
  73.         
  74.     }
  75.     [io.file]::WriteAllLines($txt_file,$output,[text.encoding]::Default);
  76. }
复制代码
QQ 33892006

TOP

回复 7# 40252492

不用客气.解决了的话,就结贴评分,有能力的赞助下论坛
QQ 33892006

TOP

返回列表