嗨大家我需要你的帮助来比较两个目录中的两个文件。以下是详细信息。
我无法发帖因为我在发布时遇到了一些格式问题,所以我在文本文件中描述了整个问题,下面提到的链接请帮我解决这个问题
抱歉编码不好我是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。
答案 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
在那里我将变量分配给一个空数组,然后我只是在那之后将文件添加到数组中。