gpt4 book ai didi

regex - 在Powershell中将一个.text文件与一个.text文件的文件夹进行比较

转载 作者:行者123 更新时间:2023-12-02 23:54:15 25 4
gpt4 key购买 nike

我正在尝试使用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完全比较后,将标记下一个AppFile相同比较的开始。

使用示例文件2(包含x1,x5和x34),输出文件将如下所示:
1,
0,
0,
0,
1,
...
1, (line 34)
...
0, (line 250)
;

但是由于某种原因,每当我运行脚本时,都不会得到1。每行只有0。这是什么原因呢?我只是在错误地使用Get-Content或Where-Object cmdlet吗?任何回应或帮助,表示赞赏。

最佳答案

看来问题在于-Contains运算符不是用于子字符串比较的,而是仅匹配完整的字符串(在集合等中)。

-Contains Description: Containment operator. Tells whether a collection of reference values includes a single test value. Ref



您需要的是 -Match运算符。
或者,您可以使用 .Contains() .NET String方法。

像这样尝试:
$lines = Get-Content C:\Users\user1\Documents\permfile.txt
$files = Get-ChildItem "C:\Users\user1\Documents\AppFiles\" -Recurse -Include *.*

foreach($file in $files) {
$content = Get-Content $file
foreach($line in $lines) {
$permmatch = $content -Match $line.Trim()
if ($permmatch.Length -eq 0) {
....

关于regex - 在Powershell中将一个.text文件与一个.text文件的文件夹进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49496852/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com