我正在尝试使用以下文件名:John_Doe_E_DOB_1 / 1 / 46_M(这是性别)_ID_0000000_IMG_FileName_Date-of-File_1 / 1 / 15_Doc-page-1并创建一个CSV文件以在Excel中打开,并带有列标题:姓氏,名字,MI,ID号,文件名,文件日期以及文档类型。到目前为止,这是我的代码:
Get-ChildItem -Path C:\Users\name\desktop\test -Recurse | ForEach-Object {$_ | add-member -name "Owner" -membertype noteproperty -value (get-acl $_.fullname).owner -passthru} | Sort-Object fullname | Select BaseName,Name,Owner | Export-Csv -Force -NoTypeInformation C:\Users\name\desktop\test\thing.csv
所有这一切都是在顶部删除那么长的文件名,然后在另一列的末尾添加ext。例如:
John_Doe_E_DOB_1 / 1 / 46_M(这是性别)_ID_0000000_IMG_FileName_Date-of-File_1 / 1 / 15_Doc-page-1将在第1列和
John_Doe_E_DOB_1 / 1 / 46_M(这是性别)_ID_0000000_IMG_FileName_Date-of-File_1 / 1 / 15_Doc-page-1.txt< -----将是第2列的唯一区别
如何将超过一百万个文件,不同长度和大小分开,并将其分解为上面列出的类别?非常感谢所有的帮助。
答案 0 :(得分:1)
我会通过调用过滤函数来替换管道的Select阶段:
filter GenObj {
$parts = $_.FullName.Split('_')
new-object pscustomobject -property @{
Owner = (get-acl $_.fullname).owner
FirstName = $parts[0]
LastName = $parts[1]
MiddleInitial = $parts[2]
# Fill in the rest
}
}
Get-ChildItem -Path C:\Users\name\desktop\test -Recurse |
Sort-Object fullname |
GenObj |
Export-Csv -Force -NoTypeInformation C:\Users\name\desktop\test\thing.csv
这将创建一个新的自定义对象,其中包含与要提取的文件名部分对应的所有属性。
此字符串拆分方法可能不起作用,具体取决于您如何处理没有中间首字母的名称。
另请注意,如果您正在处理一百万个文件,使用Sort-Object
将导致每个FileInfo对象(每个文件一个)在内存中缓冲,以便可以执行排序。您可能会耗尽内存,命令将失败。我会考虑在这种情况下删除Sort-Object。