使用Powershell创建索引文件以导入文档管理系统
问题描述:
我正在尝试编写一个Powershell脚本来创建一个索引文件,我可以使用它将大量文档导入到我们的文档管理系统中。使用Powershell创建索引文件以导入文档管理系统
几件事情:
的文件全部都位于同一个文件夹中。
的所有文件都相同的类型,.PDF
所有创建索引是在相应的文档的文件名所需的信息。
所需的索引文件的格式将是一个txt文件,这里是每一个新的行中的.txt文件的格式为:
- IndexField1,IndexField2,IndexField3 @ DocumentPath
三个例子文件:
- C:\测试\李四,约翰 - 字母小学 - 第一Grade.pdf
- C:\测试\湾,迈克尔 - 变压器高 - 第12届Grade.pdf
- C:\测试\沙马兰,M.夜 - 人格高 - 第10 Grade.pdf
结束索引文件需要像这样使用上面的例子:
- DOE,约翰,字母小学,一年级@ C:\测试\李四,约翰 - 字母小学 - 第一Grade.pdf
- 湾,迈克尔,变压器高,12年级@ C:\测试\湾,迈克尔 - 变压器高 - 12年级.pdf
- 沙马兰,M.夜,人格高,10年级@ C:\测试\沙马兰,M.夜 - 人格高 - 第10 Grade.pdf
我可以创建一个文本文件列出所有的文件夹内的文件。
Get-ChildItem C:\Test\ -name | Out-File C:\Test\results.txt
不过,我不知道从哪里开始解析RESULTS.TXT的每一行,并追加相应的信息以获得所需的索引文件的格式。
任何建议或示例带领?
答
循环由您的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,[email protected]$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