我对Powershell非常,非常非常新。我想知道是否有人帮助我使用以下脚本:
我们的想法是拥有两个excel电子表格。
1.csv
Q码 PC1009 PC1009 PC1011 PC1012
2.csv
Q码 PC1009 PC1009 PC1009 PC1012
我正在尝试比较两个CSV文档之间的值。如果1.csv中cell1中的值等于2.csv中的任何单元格,则脚本必须执行某个操作,一旦操作完成,它必须循环到1.csv中的cell2并再次将其与所有值进行比较2.csv
这就是我所管理的事情:
$CSV=Import-Csv C:\1.csv
$COMP=Import-Csv C:\2.csv
$count=0
$cnt=0
while($count -le $CSV.Count)
{
while($validator -eq $false)
{
if($CSV[$count].QCODE -eq $COMP[$cnt].QCODE)
{
Write-Host "Exiting"
$validator=$true
}
else{
$cnt++
}
}
$count++
}
这是一团糟,我道歉。任何帮助将不胜感激
答案 0 :(得分:1)
这是一个适合您的解决方案。我创建了两个带有匹配标头的CSV文件。列名是:
将这些行导入PowerShell后,它会自动为每一行创建一个PSObject。 PSObject上的属性名称将是列标题。这两个CSV文件存在于名为c:\test
的文件夹中。
注意:两个文件之间存在单个不匹配的值,处于死区。这将是我们的考验。
代码看起来像这样。有一些内嵌评论可以帮助指导您。基本上,我们动态查询所有属性(列)名称,获取每个属性的值(单元格值),并比较它们。如果它们不匹配,我们会发出警告。基于此示例中的单个,不匹配的“单元格”,我得到的输出在下面的屏幕截图中。它似乎在我的测试中运作良好。
注意:即使它说第1行不匹配,你可能认为它是第2行,那是因为数组是从零开始的。因此,在数组术语中,#1实际上是#2,因为它从零开始计数。
# Import both CSV files
$Csv1 = Import-Csv -Path C:\test\csv1.csv;
$Csv2 = Import-Csv -Path C:\test\csv2.csv;
# For each line in CSV1 ...
foreach ($Line1 in $Csv1) {
$LineNumber = $Csv1.IndexOf($Line1);
# Get the same line from CSV2
$Line2 = $Csv2[$LineNumber];
# For each property (column) ...
foreach ($Property in (Get-Member -InputObject $Line1 -MemberType NoteProperty)) {
# Get the property's name
$PropertyName = $Property.Name;
# If the value of the property doesn't match each CSV file ..
if ($Line1.$PropertyName -ne $Line2.$PropertyName) {
# Warn the user
Write-Warning -Message ('Value of property {0} did not match for line # {1}' -f $PropertyName, $LineNumber);
# PERFORM SOME CUSTOM ACTION HERE
};
}
}