【问题标题】:Comparing two text files is not working in Powershell比较两个文本文件在 Powershell 中不起作用
【发布时间】: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


【解决方案1】:

感谢@Lee_Dailey 帮助您弄清楚如何正确提问...

它最终成为参考文件 asy_files.txt 中字符之后的附加空格(3 个制表符)。 这是我从中复制的工件,powershell 看到 "as2.art""as2.art " 我不是 100% 知道为什么这很重要,但我发现使用 /S 对出现在单词字符之后的任何空格进行排序/W 并删除它使比较逻辑起作用。删除空格后,Compare-Object|Where-Object 也能正常工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    相关资源
    最近更新 更多