如何比较两个目录中的文件并保存丢失的数据

时间:2014-09-17 16:01:02

标签: powershell

嗨大家我需要你的帮助来比较两个目录中的两个文件。以下是详细信息。

我无法发帖因为我在发布时遇到了一些格式问题,所以我在文本文件中描述了整个问题,下面提到的链接请帮我解决这个问题

Click here to see the Code

抱歉编码不好我是Powershell语言的新手。

由TheMadTechnician编辑:来自其文本文件的代码,格式为:

cls
$arrFiles = Get-ChildItem -Path "C:\data\text\*.txt"
$arrFiles1 = Get-ChildItem -Path "C:\data\text\Out\*.txt"
Foreach ($objFile in $arrFiles) {
    Foreach ($objName in $objFile.FullName) {
        $objName
        $Name=$objFile.Name
    }
}
Foreach ($objFile1 in $arrFiles1) {
    Foreach ($objName1 in $objFile1.FullName){
        $objName1
        $Name1=$objFile1.Name
    }
    $FinalGroups=Compare-Object (Get-Content $objName1) (Get-Content $objName) -IncludeEqual | where {$_.SideIndicator -eq "<="} | select -ExpandProperty inputObject |Out-File C:\$($Name1) -Force
}

他有C:\ Data \ Text和C:\ Data \ Text \ Out。两者都有文件A.txt,B.txt和C.txt。他说他的代码适用于A.txt但不适用于B.txt或C.txt。

1 个答案:

答案 0 :(得分:1)

我建议将所有文件放入一个数组并按文件名分组。然后,每当你有2个同名文件时,获取它们的内容并比较两者。它看起来像这样(我没有更改你的比较对象行,因为你说它有效,除了改变它比较的对象和它保存的文件名):

cls
$arrFiles = Get-ChildItem -Path "C:\data\text\*.txt"
$arrFiles += Get-ChildItem -Path "C:\data\text\Out\*.txt"
Foreach ($objFile in ($arrFiles|group name|where{$_.count -eq 2})) {
    $File1 = Get-Content $objFile.group[0].fullname
    $File2 = Get-Content $objFile.group[1].fullname
    Compare-Object $File1 $File2 -IncludeEqual | where {$_.SideIndicator -eq "<="} | select -ExpandProperty inputObject | Out-File C:\$($objFile.group[0].name) -Force
}

编辑:好的,如果作为一个数组存在很多问题,我们可以先将变量作为数组,然后再添加文件。试试这个:

cls
$arrFiles = @()
$arrFiles += Get-ChildItem -Path "C:\data\text\*.txt"
$arrFiles += Get-ChildItem -Path "C:\data\text\Out\*.txt"
Foreach ($objFile in ($arrFiles|group name|where{$_.count -eq 2})) {
    $File1 = Get-Content $objFile.group[0].fullname
    $File2 = Get-Content $objFile.group[1].fullname
    Compare-Object $File1 $File2 -IncludeEqual | where {$_.SideIndicator -eq "<="} | select -ExpandProperty inputObject | Out-File 

在那里我将变量分配给一个空数组,然后我只是在那之后将文件添加到数组中。