首页 > 解决方案 > 使用内容分隔符作为文件名在 PowerShell 中拆分文本

问题描述

我正在尝试将 txt 转录内容拆分为单个文件,每个文件一个文件。

该文件被标记为[c. 1r], [c. 1v]...[c. 7v]等等。

使用此示例,我能够创建一个 PowerShell 脚本,该脚本使用与每个页面分隔符匹配的正则表达式来发挥魔力,但我似乎完全无法使用正则表达式来为页面提供正确的名称。使用此代码

$InputFile = "input.txt"
$Reader = New-Object System.IO.StreamReader($InputFile)
$a = 1
while (($Line = $Reader.ReadLine()) -ne $null) {
    if ($Line -match "\[c\. .*?\]") {
        $OutputFile = "MySplittedFileNumber$a$Matches.txt"
        $a++
    }    
    Add-Content $OutputFile $Line
}

所有文件都以MySplittedFileNumber1System.Collections.Hashtable.txt匹配而不是匹配命名,"$Matches[0]"我被告知该变量不存在或已被过滤-Exclude

我在执行前设置的所有尝试$regex似乎都无济于事,有人可以指出我如何将结果文件名格式化为MySplittedFileNumber[c. 1r].txt.

只使用部分匹配\[(c\. .*?)\]会更好,但是一旦我知道如何检索匹配,我敢打赌我可以找到解决方案。不知何故,我可以在 中进行变量1r 1v设置$a,但我宁愿使用 txt 文件中的变量设置,因为手稿中的某些对开页可能编号错误,我需要保留它。

原文内容input.txt

> [c。1r]
文本段落
文本段落
...
文本段落
[C。1v]
文本段落
文本段落
...
文本段落
[C。2r]
文本段落
文本段落
...
文本段落

期望的结果:

内容MySplittedFileNumber[c. 1r].txt

> [c。1r]
    文本段落
    文本段落
    ...
    文本段落

内容MySplittedFileNumber[c. 1v].txt

> [c。1v]
    文本段落
    文本段落
    ...
    文本段落

内容MySplittedFileNumber[c. 2r].txt

> [c。2r]
    文本段落
    文本段落
    ...
    文本段落

标签: regexpowershell

解决方案


我试图重现它,并稍作改动它就起作用了:

$InputFile = "input.txt"
$Reader = New-Object System.IO.StreamReader($InputFile)
$a = 1
While (($Line = $Reader.ReadLine()) -ne $null) {

    If ($Line -match "\[c\. .*?\]") {
        $OutputFile = "MySplittedFileNumber$a$($Matches[0]).txt"
        $a++
    }    
    Out-File -LiteralPath "<yourFolder>\$OutputFile" -InputObject $Line -Append
}
  1. 要在其中调用数组的位置,""您必须像这样格式化变量$($array[number])
  2. 要写入文件,您应该提供完整路径而不仅仅是文件名。

推荐阅读