gpt4 book ai didi

powershell - 递归搜索目录以查找内容与正则表达式匹配的文件,并在数组中收集匹配文件的路径

转载 作者:行者123 更新时间:2023-12-03 01:08:02 25 4
gpt4 key购买 nike

$locations = Get-ChildItem $readLoc -recurse | ? {!$_.psiscontainer} | select-object name | %{$e = $_.name; get-content $e}

$array = @()

for($i = 0; $i -lt $locations.length; $i++){
#if($locations.name[$i].length -eq "9"){
$paths = Resolve-Path $locations.fullname[$i]
$paths.path
get-content $locations.name[$i]
#$array += $paths.path
#}
}

我需要遍历文件系统中的每个文件并打开每个文件。我正在检查文件中的字符串是否与正则表达式匹配,然后将该文件的完整路径输出到数组中。

但是, $locations不接受get-content。

get-content:找不到路径
'C:\Users\xxxxxx\Documents\files\powershell\OWASP_ApplicationThreatModeling.docx'
because it does not exist.
At line:1 char:89
+ ... .psiscontainer} | select-object name |%{$e = $_.name; get-content $e}
+ ~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (C:\Users\p61782...atModeling.docx:String) [Get-Content], ItemNotFoundEx
ception
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand.

最佳答案

正如TheMadTechnician所建议的那样,使用Select-String执行正则表达式匹配会更有效:

$locations = Get-ChildItem $readLoc -File -Recurse |
Select-String -List -Pattern '^\d{3}-?\d{2}-?\d{4}$' |
Select-Object -ExpandProperty Path

注意:
-传递给 -Pattern的正则表达式是 linked to in a comment的简化版本。
请注意,正则表达式是如何用 '...'而不是 "..."括起来的,以防止PowerShell对该字符串进行无意的前期解释。
  • Get-ChildItem $readLoc -File -recurse递归枚举目标目录的子树中的所有文件。 PSv3 +中提供了-File开关(及其对应的-Directory),并且不需要? {!$_.psiscontainer}过滤器。
  • Select-String可以对通过Get-ChildItem传递的文件的内容进行操作,并默认执行正则表达式匹配:
  • -List告诉Select-String仅返回每个输入文件(如果有)中的第一个匹配项。
  • Select-String返回匹配信息对象,该对象的.Path属性包含输入文件的完整路径,因此Select-Object -ExpandProperty Path用于仅输出任何包含至少1个匹配项的文件的路径。

  • 因此,总的来说,变量 $locations接收那些文件的完整路径数组,其中至少1行与感兴趣的正则表达式匹配。
    请注意,如果输出包含多个元素,PowerShell会自动从数组中的命令收集输出。

    至于你尝试了什么:
  • 您的直接问题是您将.Name(即仅文件名)传递给Get-Content而不是.FullName
  • 此外,您的明显意图是在$locations数组中收集文件信息对象,而您的管道实际上产生了所有文件的内容(作为行的数组)。
  • 关于powershell - 递归搜索目录以查找内容与正则表达式匹配的文件,并在数组中收集匹配文件的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44552151/

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