我在创建脚本时会遇到一些问题,该脚本会根据创建时间比较两个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
此代码现在似乎将每个条目标记为"发现更改"我希望文本文件中没有任何内容,因为我的目标文件夹中的所有文件都比源文件更新。有帮助吗? 感谢。
答案 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行而不是列。