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

[问题求助] [已解决]powershell按层级和先后顺序修改每行前的序号

[复制链接]
发表于 2022-12-16 15:04:07 | 显示全部楼层 |阅读模式
本帖最后由 meixi 于 2022-12-17 15:35 编辑

下面的图片, 左侧是要处理的源文本, 右侧框中是处理后的效果, 同种颜色表示它们在同一层级的意思
注意事项:
1.进入到下一层级的标记是: 该层级之前的行开头有个 )   退出某一层级的标记是: 该层级之后的行开头有个 (
2.下一层级的起始序号是上一层最后面的序号其后加上1
3.每一层级的序号其先后顺序都修改为递加1
4.只改每一行前的序号, 序号前后的空格和文本都不要修改
5.示例文本中层级有三级, 实际情况可能会有N级

  1. $s= @'
  2. 1 中间
  3. 1 国家
  4. +
  5. 3 日
  6. +
  7. 9 韩
  8. 10 国
  9. -
  10. ) 13 中
  11.         41 日
  12.         48 美
  13.         -
  14.         63 中
  15.         ) 43 日
  16.                 12 美
  17.                 22 丽
  18.         (
  19.         43 美
  20. (
  21. 6 日
  22. 9 中
  23. ) 13 好
  24.         43 日
  25.         ) 43 子
  26.                 02 大家
  27.                 82 中
  28.         (
  29.         43 华
  30.         -
  31.         72 行人
  32.         63 列
  33.         14 必须
  34. (
  35. -
  36. 1 日
  37. 1 本
  38. +
  39. 1 美丽
  40. 1 国
  41. '@

  42. <# 处理后的效果:
  43. 1 中间
  44. 2 国家
  45. +
  46. 3 日
  47. +
  48. 4 韩
  49. 5 国
  50. -
  51. ) 6 中
  52.         61 日
  53.         62 美
  54.         -
  55.         63 中
  56.         ) 64 日
  57.                 641 美
  58.                 642 丽
  59.         (
  60.         65 美
  61. (
  62. 7 日
  63. 8 中
  64. ) 9 好
  65.         91 日
  66.         ) 92 子
  67.                 921 大家
  68.                 922 中
  69.         (
  70.         93 华
  71.         -
  72.         94 行人
  73.         95 列
  74.         96 必须
  75. (
  76. -
  77. 10 日
  78. 11 本
  79. +
  80. 12 美丽
  81. 13 国
  82. #>
复制代码

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2022-12-16 18:03:50 | 显示全部楼层
  1. $a=@(0)
  2. $s -split '\n'|%{
  3.     if($_ -match '^\D*\d+'){
  4.         $a[-1]+=1
  5.         $_ -replace '(?<=^\D*)\d+',($a -join '')
  6.     }else{$_}
  7.     if($_ -match '^\s*\)'){$a+=0}
  8.     if($_ -match '^\s*\('){$a=$a[0..($a.count-1-1)]}
  9. }
复制代码

评分

参与人数 1技术 +1 收起 理由
meixi + 1 乐于助人

查看全部评分

 楼主| 发表于 2022-12-17 15:35:05 | 显示全部楼层
回复 2# idwma

多谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-17 06:24 , Processed in 0.026873 second(s), 13 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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