我对这个很疯狂,希望有人可以提供帮助。请温柔,我的编码技巧不是很好。
我有两个单独的CSV文件,我正在尝试进行比较。每个CSV都包含一个计算机帐户列表。我想将这两个文件之间的差异导出到新的CSV。一个文件位于已定义的目录中,但另一个文件位于单独的目录结构中。这是一个例子:
定义目录中的文件1:C:\blah\xyz.csv
文件2位于不同的变化目录中:C:\share\uploads\foo\bar\xyz-computers.csv
这些文件名的XYZ部分是客户端名称,路径的\foo\bar\
部分对于每个文件可能不同。每个文件2名称始终以*-computers.csv
结尾。我正在尝试使用搜索结果与定义目录中的文件进行比较。由于我对编码的无知而失败了。 (我正在努力!)
这就是我所拥有的。由于$file2
为空,似乎失败了:
gci C:\share\uploads -include *computers.csv -recurse | foreach {$path = $_.FullName;
$client = $_.Name.Trim("-computers.csv");
$file1 = import-csv -path c:\workingdir\output\$client.csv;
$file2 = import-csv -path $path | Compare-Object $file1 $file2 -property Name} | export-csv C:\workingdir\$client.csv -NoTypeInformation
任何帮助将不胜感激。我被卡住了!
答案 0 :(得分:0)
如果没有一些示例CSV文件,请不要确定我已修复它或使其变得更糟。一些问题:
Compare-Object
发送任何内容。Import-CSV
调用是否有效的代码,如果没有,则编写一条消息。Trim
的调用失败了。我把它改成了替换。剩余问题
$files = Get-ChildItem C:\share\uploads -include *computers.csv -recurse
$files | Foreach-Object {
$path = $_.FullName
Write-Verbose "Path: $path" -Verbose
$client = $_.Name.Replace("-computers.csv","")
Write-Verbose "Client: $client" -Verbose
$file1 = Import-Csv -path c:\workingdir\output\$client.csv
$file2 = Import-Csv -path $path
if($file1 -and $file2) {
Compare-Object $file1 $file2 -property Name
}
else
{
Write-Verbose -Message "Error processing $path" -Verbose
}
} | Export-Csv C:\workingdir\$client.csv -NoTypeInformation