我正在尝试编写一个PowerShell脚本来创建一个索引文件,我可以用它将大量文档导入我们的文档管理系统。
有几件事:
所有文件都位于同一文件夹中。
所有文件的类型相同,.pdf
创建索引所需的所有信息都在相应文档的文件名中。
所需索引文件的格式为.txt,这是.txt文件中每个新行的格式:
三个示例文档:
使用上面的示例,结束索引文件需要如下所示:
我可以创建一个列出文件夹中所有文档的.txt文件。
Get-ChildItem C:\Test\ -name | Out-File C:\Test\results.txt
但是,我不知道从哪里开始解析results.txt的每一行,并附加适当的信息以获取索引文件所需的格式。
任何带领的建议或示例?
答案 0 :(得分:1)
循环遍历Get-ChildItem
返回的对象。然后,您可以将-split
或-replace
与正则表达式一起使用,以过滤掉您要查找的各个部分。然后将它们组合成输出所需的格式。
$Output = Get-ChildItem C:\Test\ | ForEach-Object {
$Last = ($_.BaseName -split ',')[0]
$First = $_.BaseName -replace '(^.*?,\s)(.*?)(\s-\s.*)','$2'
$School = $_.BaseName -replace '(^.*?\s-\s)(.*?)(\s-\s.*)','$2'
$Grade = ($_.BaseName -split ' - ')[-1]
$Path = $_.FullName
# Unsure if there is supposed to be a space before first name.
"$Last, $First,$School,$Grade@$Path"
}
$Output | Out-File C:\Test\results.txt
您的输出看起来像没有标题的.csv,没有正确的引号。如果您的文档管理系统(DMS)确实需要格式正确的.csvs,那么您可以创建对象数组,然后以CSV格式导出它们。使用ConvertTo-CSV
然后Select-Object -Skip 1
将允许您跳过文件上的标题。
$Output = Get-ChildItem C:\Test\ | ForEach-Object {
[pscustomobject]@{
Last = ($_.BaseName -split ',')[0]
First = $_.BaseName -replace '(^.*?,\s)(.*?)(\s-\s.*)','$2'
School = $_.BaseName -replace '(^.*?\s-\s)(.*?)(\s-\s.*)','$2'
GradeAtPath = "$(($_.BaseName -split ' - ')[-1])@$($_.FullName)"
}
}
$Output | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File C:\Test\results.txt