Powershell - 比较两个文件

时间:2014-08-01 19:37:28

标签: powershell

我正在尝试比较两个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

1 个答案:

答案 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