将一个.txt文件与Powershell中的.txt文件文件夹进行比较

时间:2018-03-26 17:02:11

标签: regex shell powershell

我试图使用Powershell将一个.txt文件与多个.txt文件进行比较。第一个.txt文件看起来像这样:

x1
x2
x3
...
x250

其他文件都采用以下格式:

uses 'x1'
uses 'x5'
uses 'x34'

......等等。

这是我写的关于此的脚本:

$lines = Get-Content C:\Users\user1\Documents\permfile.txt
$files = Get-Content "C:\Users\user1\Documents\AppFiles\"

foreach($file in $files){
  Get-Content $file
  foreach($line in $lines){
    $permmatch = Where-Object {$line -CIn $file}
    if ($permmatch -CNotContains $line) {
      Write-Output "0, `n" >> C:\Users\user1\Object\binary.txt
    } 
    else {
      Write-Output Write-Host "1, `n" >> C:\Users\user1\Object\binary.txt
    }
  }
  Write-Output "; `n" >> C:\Users\user1\Object\binary.txt
}

目标是创建一个新文件,逐行模仿文件1,使用" 1,"代替AppFile(文件2)中的每一行,以及" 0,"代替没有的每一条线。一旦给定的AppFile与文件1完全比较,a;将标记下一个AppFile的相同比较的开始。

使用包含x1,x5和x34的示例文件2,这就是输出文件的样子:

1,
0,
0,
0,
1,
...
1, (line 34)
...
0, (line 250)
;

但出于某种原因,每当我运行脚本时,我都没有1。每行只有0。这是什么原因?我只是错误地使用Get-Content或Where-Object cmdlet?任何回应或协助都表示赞赏。

1 个答案:

答案 0 :(得分:1)

看起来问题是 public <init>()V L0 LINENUMBER 1 L0 ALOAD 0 INVOKESPECIAL java/lang/Object.<init> ()V L1 LINENUMBER 3 L1 ALOAD 0 NEW java/lang/Integer DUP ALOAD 0 INVOKESPECIAL Foo.getA ()I ALOAD 0 INVOKESPECIAL Foo.getB ()I IADD ICONST_1 IADD INVOKESPECIAL java/lang/Integer.<init> (I)V PUTFIELD Foo.bar : Ljava/lang/Integer; RETURN L2 LOCALVARIABLE this LFoo; L0 L2 0 MAXSTACK = 5 MAXLOCALS = 1 运算符不是用于子字符串比较,而是仅匹配一个完整的字符串(在集合中等)。

  

-Contains描述:遏制操作符。判断参考值集合是否包含单个测试值。 Ref

您需要的是-Contains运营商 或者,您可以使用-Match .NET String方法。

试试这样:

.Contains()