[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何根据关键字复制指定段落生成新文档?

输入关键字,从一个指定位置的指定txt文档中拷贝出包含该关键字的段落在另一个指定位置生成一个新的txt文档,每个段落之间都有空行,新的文档开头结尾需要包含空行
新人请多关照

段落与行有什么区别?最好举个例子.
微信:flashercs
QQ:49908356

TOP

  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
  5. exit /b
  6. #>
  7. # 源文件
  8. $srcfile = "src.txt"
  9. # 新文件
  10. $dstfile = "dst.txt"
  11. # 查找文本
  12. $search = "0x00"
  13. $encoding = [System.Text.Encoding]::Default
  14. $txt = [System.IO.File]::ReadAllText($srcfile, $encoding)
  15. $lines = $txt -split '(\r\n){2,}' | ForEach-Object {
  16.   if ($_.Contains($search)) {
  17.     ''
  18.     $_
  19.    
  20.   }
  21. }
  22. [System.IO.File]::WriteAllLines($dstfile, $lines, $encoding)
复制代码
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 2# flashercs


    大佬好,段落是有许多行,一个时间字符串下面带有几行信息为一个段落,例如:

202112081101
dsbfuihljkahiosuh
nsdajkiflhkjahsdfklj
bndjksalhfklj
aisjnkdf


2021112081105
sdaljgfjkasd
sdafdsfg
asdgfasd
新人请多关照

TOP

回复 3# flashercs


    大佬厉害,请问大佬能不能把搜索内容和新文件名变成可以手动输入的同一个变量?
新人请多关照

TOP

  1. <#*,:&cls
  2. @echo off
  3. cd /d "%~dp0"
  4. powershell -NoProfile -ExecutionPolicy RemoteSigned -Command ". ([ScriptBlock]::Create((Get-Content -LiteralPath \"%~0\" -ReadCount 0 | Out-String ))) "
  5. exit /b
  6. #>
  7. # 源文件
  8. $srcfile = "src.txt"
  9. $encoding = [System.Text.Encoding]::Default
  10. $txt = [System.IO.File]::ReadAllText($srcfile, $encoding)
  11. $lines = $txt -split '(\r\n){2,}'
  12. while ($true) {
  13.   try {
  14.     $search = Read-Host -Prompt '请输入搜索内容(直接回车退出脚本)'
  15.     if ($search -eq [string]::Empty) { break }
  16.     $result = $lines | ForEach-Object {
  17.       if ($_.Contains($search)) {
  18.         ''
  19.         $_
  20.       }
  21.     }
  22.     if ($null -eq $result) {
  23.       Write-Host '未找到内容' -ForegroundColor Red
  24.     } else {
  25.       [System.IO.File]::WriteAllLines($search, $result, $encoding)
  26.     }
  27.   } catch {
  28.     $_ | Write-Host -ForegroundColor Red
  29.   }
  30. }
复制代码
回复 5# 长风踏雪
微信:flashercs
QQ:49908356

TOP

回复 3# flashercs


    大佬,请问不用静态方法怎么写
我想请教用cmd-let给文本分段落该怎么写呢

TOP

回复 7# for_flr
  1. $lines = get-content -path src.txt -delimiter "`r`n`r`n"
复制代码
微信:flashercs
QQ:49908356

TOP

回复 8# flashercs

谢谢指点,可以多问一下吗:
1,`r`n`r`n这个是表示连续按了两次enter键,所以刚好就是一个空行,以此分段?
2,既然这样这么简单,为啥要用静态方法呢,感觉这个打字都会少打一些。

TOP

回复 9# for_flr
段落分割也可能是多于2个换行符;
用啥无所谓,习惯就行.
1

评分人数

微信:flashercs
QQ:49908356

TOP

回复 10# flashercs


   
再看了一次,才明白-split '(\r\n){2,}'那里原来用的是正则表达,`r`n重复两次或多次,跟-delimiter "`r`n`r`n"一个样。

TOP

返回列表