脚本移动基于CSV但部分匹配的文件夹



如何让脚本执行作业,即使匹配模式只是部分的?

CSV>

00001) doe_john_a_00 - B) doe_john_b_01 - 00001

C) doe_jane_02 - 00003文件夹

00001) doe_john_a_00 - B) doe_john_01 - 00001
C) doe_jane_c_02 - 00003

脚本我建立了一个交互脚本,做两件事,导出CSV和复制文件夹。
两个函数段几乎相同。唯一的区别是最后一个管道,copy-item和export-csv。

$folders = Get-ChildItem $clients -Directory
Import-Csv $csv | Foreach-Object {
$last,$first = $_.Client -split ', *'
$first,$middle = $first -split ' '
if ($_.Case -match 'd{2}(d{2})d*(d{5})') {
$date = $matches.1
$number = $matches.2
$folders | where Name -match "^${last}_${first}_(${middle}_)?${date}-${number}$" | 
Export-CSV -Path $export -Append
}
}

我的问题
到目前为止,我所拥有的可以扫描csv,将csv中的模式与源目录相匹配,然后执行任务。如果CSV文件有中间名,例如:Doe Johna,那么脚本可以省略A,并且仍然匹配A)文件夹(Doe_John_A_00-00001)。

然而,如果CSV没有姓氏而文件夹有,那么模式将无法匹配并且不会复制,而它应该。

    1. 无论CSV或源目录是否具有中间名("A", "B", "C),我如何使其匹配?
    1. 最后,我想让它输出到csv以列出部分匹配和完全匹配。
    1. 在工作时复制项目不保留时间戳或权限

如果请求1可以完成,那么请求2就不那么重要了。

您可以调整正则表达式以接受任何单个字符.,如果它存在:

$folders | where Name -match "^${last}_${first}_(._)?${date}-${number}$"

对于没有"Doe, John "$middle的用户,这将匹配Doe_John_A_34-56789Doe_John_34-56789。如果中间可以是多个字符

另外,要注意名字可以并且确实有空格"Smith, Anne Marie A",所以如果可能的话,您可能需要调整获取原始csv的方式,以确保中间的首字母更好地分开

相关内容

最新更新