在Powershell中无法比较两个文本文件



我正在尝试比较两个文本文件的内容,只将差异输出到控制台。

第一个文本文件基于文件夹中的文件名。$AsyFolder = Get-ChildItem -Path .asy-data -Name

然后,我删除了由用户设置的文件名前缀,该前缀对每个文件都是相同的,并用破折号与相关信息隔开。

$AsyFolder| ForEach-Object{$_.Split("-").Replace("$Prefix", "")} | Where-Object {$_}|Set-Content -Path .templog.txt

输出看起来像$Asyfolder输出

bpm.art
gbr.pdf
asy.pdf
fab.pdf
as1.art
odb.tgz
ccam.cad
read_me_asy.txt

还有另一个文件是引用,它包含应该存在的文件的后缀。它看起来像这个参考文件

tpm.art
bpm.art
gbr.pdf
asy.pdf
fab.pdf
as1.art
as2.art
odb.tgz
xyp.txt
ccam.cad

其内容用$AsyTemplate = Get-Content -Path C:Usersasy_files.txt接收逻辑如下

$AsyTemplate |
ForEach-Object{
If(Select-String -Path .templog.txt -Pattern $_  -NotMatch -Quiet){
Write-Host "$($_)" 
}
}

我尝试了各种方法来设置带有-InputObject的templog.txt:使用Get-Content、Get-Content-Raw,一个变量,手动编写数组。我还尝试删除-NotMatch,并使用-eq$False作为select字符串的输出。

每次输出只是asy_files.txt(参考文件(的内容。它似乎并不关心templog.txt($AsyFolder Output(中的内容。

我也尝试过使用compare-object/where-object方法,它只是说两个文件完全不同。

感谢@Lee_Dailey帮助您了解如何正确提问。。。

它最终成为引用文件asy_files.txt中字符后面的额外空白(3个选项卡(。这是我复制的地方的一个工件,powershell看到了"as2.art""as2.art "。我不知道为什么这很重要,但我发现用/S对单词字符/W后面出现的任何空白进行排序并将其删除可以使比较逻辑正常工作。Compare Object | Where Object在删除空白后也能正常工作。

相关内容

  • 没有找到相关文章

最新更新