我正在尝试比较两个csv文件,每个文件一列,一个带数字(4590987),一个带扩展数字(4590987.htm)。我想找到所有匹配项,并将其写入另一个csv文件,以便我可以使用它来从文件夹中获取文件并将它们复制到 另一个文件夹进行进一步处我有csv文件排序,带有标题,但无法弄清楚如何比较和写出结果。或者将数字列表与文件夹的内容进行比较并将这些文件复制出来。我的列表唯一的问题是大约3000行,目录中有大约45000个文件,所以我担心它可能需要一段时间。
$csv1 = Import-Csv $readfilebasesorted1
$csv2 = Import-Csv $readlistsorted1
$hash = @{}
$match = "^\d{7}"
$funmatch = ([regex]::matches($csv1, $match))
foreach ($line in $funmatch){
foreach ($lines in $csv2){
if ($line -match $lines){
$hash += $line
$hash = Write-Output $result
}
}
}
新代码,希望格式化得更好。
$a = Import-CSV "C:\read\20140630.csv" - header("ProID","EventDate","EventType","EventNotes")
$scrdir = '\\pl1\Prolaw\gwdocs\4754-66921'
$sortedlist = 'C:\ProLaw\sortedlist.csv'
$docs = 'C:\ProLaw\Docs'
# Sort
$sort = $a | Sort-Object ProID | Export-Csv $sortedlist -NoTypeInformation
$listtomove = Import-Csv $sortedlist
$scrdir = '\\pl1\Prolaw\gwdocs\4754-66921'
GCI $scrdir | ?{$listtomove.ProID -contains $_.BaseName} | Select -Expand FullName | Copy-Item -Destination $docs
答案 0 :(得分:0)
哎呀,不,这就是为什么你有-in和-contains运算符!
好的,所以这就是你做的。拉一个目录列表,对于每个文件,如果它的名称列在您的CSV数字列表中,请将该文件移动到任何位置。假设你有一个标题为FileName的列,其中列出了所有数字,它的内容如下:
$ListToMove = Import-CSV $readlistsorted1
$Source = <Path to files>
$Destination = <Path to folder where they need to go>
GCI $Source | ?{$ListToMove.FileName -contains $_.BaseName} |Select -Expand FullName| Move-Item -Destination $Destination
编辑:好的,这是您的代码,与我的相结合,以便它可以满足您的需求:
$a = Import-CSV "C:\read\20140630.csv" -header("ProID","EventDate","EventType","EventNotes")
$scrdir = '\\pl1\Prolaw\gwdocs\4754-66921'
$docs = 'C:\ProLaw\Docs'
GCI $scrdir | ?{$a.ProID -contains $_.BaseName} | Select -Expand FullName | Copy-Item -Destination $docs