比较两个CSV文件的创建日期,并使用Powershell将更改保存在另一个CSV中

时间:2015-08-19 08:26:01

标签: file powershell csv comparison powershell-v3.0

我在创建脚本时会遇到一些问题,该脚本会根据创建时间比较两个CSV文件,并将结果另存为另一个CSV。我想比较一个是最新的文件。所以,我有2个目录,一个是源,另一个是目的地。如果源中的文件比目标更新,则脚本应获取文件名,并将其复制到目标。这是我的代码 -

$source = import-csv -Path "c:\network.csv" 
$destination = import-csv -Path "c:\local.csv"

$output = @()  
   forEach ($Column in $source) {      
     $result = $destination | Where-Object {$Column.Name -eq $_.Name}  
     $CreationTime = if ($Column.CreationTime -lt $result.CreationTime) 
     { 
        write-host "Found Change"
        write-host  $Column.CreationTime
        write-host  $result.CreationTime

     }  
     $output += New-object PSObject -property @{  
       FileName = $Column.Name  
       CreationTime = $Column.CreationTime 
     }  
   }  
 $output | select-object FileName, CreationTime | Export-Csv -Path C:\Changes.csv -NoTypeInformation  

此代码现在似乎将每个条目标记为"发现更改"我希望文本文件中没有任何内容,因为我的目标文件夹中的所有文件都比源文件更新。有帮助吗? 感谢。

1 个答案:

答案 0 :(得分:0)

您正在if语句之外的$ output对象中添加文件,因此所有内容都已添加。这应该有效:

$source = import-csv -Path "c:\network.csv" 
$destination = import-csv -Path "c:\local.csv"

$output = @()
forEach ($row in $source) {      
    $result = $destination | Where-Object {$row.Name -eq $_.Name}  

    if ($row.CreationTime -lt $result.CreationTime) { 
        write-host "Found Change"
        write-host  $row.CreationTime
        write-host  $result.CreationTime
        $output += New-object PSObject -property @{  
            FileName = $row.Name  
            CreationTime = $row.CreationTime
        }
    }
}  

$output | select-object FileName, CreationTime | Export-Csv -Path C:\Changes.csv -NoTypeInformation 

我还将$ Column更改为$ row,因为您正在迭代csv行而不是列。