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

[文本处理] [求助]批处理排列很规则的文本,按条件去除部分内容

[复制链接]
发表于 2021-2-3 09:54:51 | 显示全部楼层 |阅读模式
祝您新年快乐,牛年大吉。想请您帮忙解决2个小需求。

现有文本tt.txt,内容如下:(排列很规则,每一组文字中间空2行。但每组文字的行数不一,3 4 5个都有!)


  1. 铅笔画,
  2. 迪士尼,
  3. 手绘,
  4. 黑白,
  5. 血源诅咒,


  6. 雨,
  7. 伞,
  8. 女孩,
  9. 夜景,


  10. 爱德蒙·唐泰斯,
  11. Fate/GrandOrder,
  12. FGO,
  13. 香烟,
  14. 岩窟王,


  15. Fate/GrandOrder,
  16. FGO,
  17. 迦尔纳,


  18. 水彩,
  19. 女孩,
  20. 手绘,


  21. 苏菲·诺伊恩缪拉,
  22. 索菲的工作室,
  23. 炼金,


  24. 卷发,
  25. 少女,
  26. 美女,
  27. 长发,
  28. 波浪,
复制代码
最终需求是: 每组文字中,不管有几行,都只保留一行。
保留的这一行,不能是存在特殊符号的那一行。比如tt.txt中,有的文字组中,存在符号 · 和 / 。存在符号的话,就不能保留这一行的文字。 英文逗号除外,毕竟是结尾的分隔符号,要保留。

效果:
  1. 铅笔画





  2. FGO


  3. FGO


  4. 水彩


  5. 索菲的工作室


  6. 卷发
复制代码
发表于 2021-2-3 10:10:36 | 显示全部楼层
回复 1# 灯塔彭于晏
你认为何为特殊符号,要列出来。
 楼主| 发表于 2021-2-3 10:17:53 | 显示全部楼层
回复 2# qixiaobin0715


    目测来看,是除了英文逗号以外都是特殊符号了。
发表于 2021-2-3 12:02:29 | 显示全部楼层
本帖最后由 flashercs 于 2021-2-3 12:32 编辑

保存为 保留指定行.bat
  1. <#*,:&cls
  2. @echo off
  3. pushd "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath "%~0" -ReadCount 0 | Out-String ))) "
  5. popd
  6. pause
  7. exit /b
  8. #>
  9. $srcfile = "tt.txt"
  10. $dstfile = "ttNEW.txt"
  11. $stack = 0
  12. Get-Content -Path $srcfile -OutBuffer 100 | ForEach-Object {
  13.   $line = $_
  14.   switch ($stack) {
  15.     0 {
  16.       if ($line -ne '') {
  17.         if ($line -match '^[\w, ]+$' -and $line -notmatch '_') {
  18.           $stack = 2
  19.           $line.Replace(',', '')
  20.         } else {
  21.           $stack = 1
  22.         }
  23.       } else {
  24.         $line
  25.       }
  26.     }
  27.     1 {
  28.       if ($line -eq '') {
  29.         $stack = 0
  30.         $line
  31.       } elseif ($line -match '^[\w, ]+$' -and $line -notmatch '_') {
  32.         $stack = 2
  33.         $line.Replace(',', '')
  34.       }
  35.     }
  36.     2 {
  37.       if ($line -eq '') {
  38.         $stack = 0
  39.         $line
  40.       }
  41.     }
  42.   }
  43. } | Set-Content -Path $dstfile

复制代码
发表于 2021-2-3 12:11:54 | 显示全部楼层
本帖最后由 WHY 于 2021-2-3 16:32 编辑
  1. PowerShell "$a=@(gc tt.txt) -notMatch '[\p{P}-[,]]' | forEach{if($_ -ne '' -and [string]::isNullOrEmpty($s)){$_}; $s=$_}; sc bb.txt ($a -replace ',' -join "`r`n`r`n`r`n")"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 21:47 , Processed in 0.027399 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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