我试图编写一个PowerShell脚本来创建一个索引文件,用于将大量文档列表导入到我们的文档管理系统中。
几件事:
所需索引文件的格式为.txt,以下是.txt文件中每一行的格式:
三个示例文件:
使用上述示例,结束索引文件将需要如下所示:
我可以创建一个.txt文件,列出文件夹中的所有文档。
Get-ChildItem C:\Test\ -name | Out-File C:\Test\results.txt但是,我不知道从哪里开始解析results.txt的每一行并附加适当的信息来获取索引文件所需的格式。
有什么建议或榜样可供参考吗?
发布于 2017-10-20 14:04:01
循环您的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.txthttps://stackoverflow.com/questions/46849904
复制相似问题