如何从文本文件中提取字符串并使用它重命名文件?

时间:2017-07-25 17:59:19

标签: powershell pdf command-line

对于我正在处理的项目,我需要使用表单中的内容重命名成千上万的表单(.pdf)。

到目前为止,我已对它们运行OCR并将内容导出到文本文件中。每个PDF表单都有一个同名的.txt文件,其中包含所有信息。我想使用powershell(如果可能的话)提取文本文件的特定部分来重命名PDF文件,但我不知道如何做到这一点。

为了更好地了解我正在处理的内容,pdf和文本文件(ex-12345.pdf和12345.txt)中包含的表单看起来像这样 -

~~~

选区:xxxyyyzzz

投票站:abc def ghi(001)

stream:123

~~~

我需要做的是提取投票站名称并将pdf文件重命名为。

“12345.pdf” - > “abc_def_ghi_(001).PDF”

所以我需要弄清楚如何从12345.txt中提取“station:”和“stream:”之间的字符串。但是为了使事情变得复杂一点,我想要提取字符串的文本文件在间距方面有一些不规则性。

例如,上一个表单在文本文件中可能如下所示 -

~~~

constit uency:xxxyyyzzz

polling stat i on:abc de f ghi(00 1)

s tream:12 3

~~~

幸运的是,这些信件本身似乎完好无损。

所以,我想学习如何从这些文本文件中提取包含轮询站名称的字符串,并用它重命名相应的pdf文件。

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

'polling station: abc def ghi (001)' |
  Select-String ' station: (.+)' |
  ForEach-Object { "{0}.pdf" -f ($_.Matches[0].Groups[1].Value -replace ' ','_') }
# outputs 'abc_def_ghi_(001).pdf' 

答案 1 :(得分:1)

假设您知道每个“轮询站”行的行间距相同,您可以删除所有空格。然后修剪掉不相关的部分,然后使用substring()方法格式化你的行。

$Text = 'constit uency: xxxyyyzzz

polling stat i on: abc de f ghi (00 1)

stream: 12 3'
$trimmed = $text -replace "\s",'' -replace '^.*pollingstation:','' -replace "stream:.*$",''
"$($trimmed.substring(0,3))_$($trimmed.substring(3,3))_$($trimmed.substring(6,3))_$($trimmed.substring(9,5)).pdf"

#Output: 'abc_def_ghi_(001).pdf'