【发布时间】:2020-05-07 00:33:57
【问题描述】:
我正在尝试比较两个文本文件的内容,并且只将差异输出到控制台。
第一个文本文件基于文件夹中的文件名。
$AsyFolder = Get-ChildItem -Path .\asy-data -Name
然后我删除用户设置的文件名前缀,每个文件都相同,并用破折号与相关信息隔开。
$AsyFolder| ForEach-Object{$_.Split("-").Replace("$Prefix", "")} | Where-Object {$_}|Set-Content -Path .\templog.txt
输出看起来像$Asyfolder Output
bpm.art
gbr.pdf
asy.pdf
fab.pdf
as1.art
odb.tgz
ccam.cad
read_me_asy.txt
还有另一个文件是参考文件,其中包含应该存在的文件的后缀。 看起来像这样Reference File
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:\Users\asy_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 输出选择字符串。
尽管输出只是 asy_files.txt(参考文件)的内容。它似乎并不关心 templog.txt($AsyFolder 输出)中的内容。
我也尝试过使用 compare-object/where-object 方法,它只是说两个文件完全不同。
【问题讨论】:
-
请不要发布代码/错误/数据的图像。由于您发布了数据的图像,因此针对该数据测试代码的唯一方法是输入您已经拥有的文本。请用实际文字替换数据图片。
-
stackoverflow.com/questions/19402629/… 回答问题
I am trying to compare the contents of two text files and have only the differences be outputted to the console. -
感谢Lee的建议,我尝试了一些链接,发现一个文件的文本后面有多余的空格。我运行了一些代码来删除空格,这有所帮助,但它仍然没有按预期运行。 IE 它仍然将参考文件中的每一行输出到控制台。当它应该只写 as2.art、tpm.art 和 xyp.txt 时
-
@PaulRd - 要让 S-O 向特定的人发送通知,您需要使用
@UserName- 就像我对这个消息所做的那样。 [咧嘴]
标签: list powershell text console compare