powershell遍历文件获取字段列表
# 指定要搜索的文件夹路径和正则表达式关键字 $folderPath = "C:\myapp1\","C:\myapp2\" $table_list = "tblBOM,tblTest" $tables = $table_list.Split(',') foreach ($table in $tables) { $regexPattern_field = "$table\.(\w+)\b" # 匹配 "$table." 后跟一个或多个任意字符 # 获取文件夹中的所有文本文件(可以根据需要修改文件类型过滤器) $textFiles = Get-ChildItem -Path $folderPath -Recurse -Include *.cs,*.sql $fieldNames = @() # 在每个文件中搜索关键字 foreach ($file in $textFiles) { # 使用Select-String和正则表达式搜索关键字 $content = Get-Content -LiteralPath $file.FullName -Raw $matches = Select-String -Pattern $regexPattern_field -AllMatches -InputObject $content; # 如果找到匹配项,则输出文件名和匹配行 if ($matches.Matches.Count -gt 0) { foreach ($match in $matches.Matches) { # 提取第一个捕获组,即tblItem后的字段名 # 如果需要多个字段,可以调整捕获组以匹配更多内容 $fieldName = $match.Groups[1].Value.Trim() # 添加字段名到数组 $fieldNames += "," + $table + "." + $fieldName } } $regexPattern = "$table\b.(\w+)\t" $matches = Select-String -Pattern $regexPattern -AllMatches -InputObject $content; $alias_list = @() # 如果找到匹配项,则输出文件名和匹配行 if ($matches.Matches.Count -gt 0) { foreach ($match in $matches.Matches) { $alias = $match.Groups[1].Value.Trim() $alias_list += $alias } } if ($alias_list.Count -gt 0){ $alias_list_end = $alias_list | Sort-Object -Unique foreach ($alias in $alias_list_end) { $regexPattern_alias = "$alias\.(\w+)\b" $matches = Select-String -Pattern $regexPattern_alias -AllMatches -InputObject $content; # 如果找到匹配项,则输出文件名和匹配行 if ($matches.Matches.Count -gt 0) { foreach ($match in $matches.Matches) { $fieldName = $match.Groups[1].Value.Trim() $fieldNames += "," + $alias + "." + $fieldName } } } } } #if ($fieldNames.Length -gt 0){ Write-Host " " Write-Host "select " $fieldNames | Sort-Object -Unique Write-Host " from $table;" Write-Host " " Write-Host " " #} }