我有一个包含以下数据的文本文件:
1390 resource core\scripts\script.properties
1395 resource core\scripts\script.xml
1396 resource core\scripts\script_customer.xml
...
等等。
我还有一个args列表,例如file1.txt
,file2.txt
等
我想做的是通过给定的文件名提取数字ID(如果存在)。
我写了以下内容,将文件内容读入集合:
$regex = "^(?<code>\d+)\s+(?<descriptor>\w+)\s+(?<filename>.*)$"
$results = Get-Content .\resources.txt |
ForEach-Object {
if ($_ -match $regex) {$matches} else { return }
} |
select –Property @{name='code'; expression={$_.code} },
@{name='descriptor'; expression={$_.descriptor} },
@{name='filename'; expression={$_.filename} }
这给了我一个漂亮的列表中文件中的所有条目。
我现在如何查询$results
,为args中包含文件名的任何条目提供code
?
e.g。在C#LINQ中,我做了类似的事情:
from arg in args
from result in results
where result.fileName.Contains(arg)
select result.code
答案 0 :(得分:1)
试试这个(PSv3 +):
$results | where-object filename -match $arg | select-object -expand code