我试图使用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?任何回应或协助都表示赞赏。
答案 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()