如何让脚本执行作业,即使匹配模式只是部分的?
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没有姓氏而文件夹有,那么模式将无法匹配并且不会复制,而它应该。
- 无论CSV或源目录是否具有中间名("A", "B", "C),我如何使其匹配?
- 最后,我想让它输出到csv以列出部分匹配和完全匹配。
- 在工作时复制项目不保留时间戳或权限
如果请求1可以完成,那么请求2就不那么重要了。
您可以调整正则表达式以接受任何单个字符.
,如果它存在:
$folders | where Name -match "^${last}_${first}_(._)?${date}-${number}$"
对于没有"Doe, John "
等$middle
的用户,这将匹配Doe_John_A_34-56789
和Doe_John_34-56789
。如果中间可以是多个字符
另外,要注意名字可以并且确实有空格"Smith, Anne Marie A"
,所以如果可能的话,您可能需要调整获取原始csv的方式,以确保中间的首字母更好地分开