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 " "
    #}
}

  

posted @ 2024-02-26 08:59  Ender.Lu  阅读(43)  评论(0编辑  收藏  举报