You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell对比单个TXT文件与文件夹内多个TXT文件

PowerShell脚本:对比基准权限文件与多个应用文件的匹配项

我看你已经着手写PowerShell脚本来对比权限文件和应用文件的匹配项了,不过有几个关键地方需要调整和补全,我帮你把脚本完善好,刚好能贴合你的需求:

先明确你的需求:

  • 基准文件permfile.txt:内容是空格分隔的权限项(比如 x1 x2 x3 … x250)
  • 目标目录AppFiles下的多个TXT文件:内容格式为 uses 'x1' uses 'x5' …
  • 需要找出每个应用文件中,和基准文件匹配的权限项

完整优化后的脚本

# 1. 读取基准权限文件,拆分成干净的权限数组
# 假设permfile是一行空格分隔的项,如果是每行一个项,注释掉下面这行,启用下一行
$permissions = (Get-Content "C:\Users\user1\Documents\permfile.txt" -Raw).Trim() -split '\s+' | Where-Object { $_ }
# $permissions = Get-Content "C:\Users\user1\Documents\permfile.txt" | Where-Object { $_ }  # 每行一个权限项时用这个

# 2. 获取目标目录下的所有TXT文件(这里要注意用Get-ChildItem,不是Get-Content)
$appFiles = Get-ChildItem -Path "C:\Users\user1\Documents\AppFiles\" -Filter "*.txt"

# 3. 遍历每个应用文件,逐一对比
foreach ($file in $appFiles) {
    Write-Host "`n=== 正在处理文件: $($file.Name) ===" -ForegroundColor Cyan

    # 4. 读取文件内容,提取所有单引号内的权限项
    $fileContent = Get-Content $file.FullName -Raw
    # 用正则表达式匹配'xxx'格式的内容,提取出中间的权限项
    $usedPermissions = [regex]::Matches($fileContent, "'([^']+)'") | ForEach-Object { $_.Groups[1].Value }

    # 5. 对比基准权限列表,筛选出匹配项
    $matchedPermissions = $usedPermissions | Where-Object { $permissions -contains $_ }

    # 6. 输出结果(也可以改成写入文件)
    if ($matchedPermissions.Count -gt 0) {
        Write-Host "匹配到的权限项:" -ForegroundColor Green
        $matchedPermissions | ForEach-Object { Write-Host "- $_" }
        # 可选:把结果写入文件
        # $matchedPermissions | Out-File "C:\Users\user1\Documents\MatchResults_$($file.Name)" -Encoding utf8
    } else {
        Write-Host "未匹配到任何权限项" -ForegroundColor Yellow
    }
}

关键细节说明

  • 读取基准文件的两种方式:脚本里提供了两种读取逻辑,根据你的permfile.txt实际格式选择:
    • 如果是一行空格分隔所有权限,用第一行的-Raw读取+拆分逻辑
    • 如果是每行一个权限项,启用注释的第二行
  • 获取目标文件:你之前用Get-Content读取目录是错误的,必须用Get-ChildItem来获取目录下的文件列表
  • 提取应用文件中的权限项:用正则表达式'([^']+)'精准匹配单引号内的内容,避免把uses这类无关字符也提取出来
  • 匹配逻辑:用-contains判断权限项是否在基准列表中,简单高效

可选扩展

如果需要把所有结果汇总到一个文件里,可以在循环结束后添加:

# 汇总所有匹配结果到一个文件
$allMatches = @()
foreach ($file in $appFiles) {
    # 重复上面的提取和匹配逻辑,把结果添加到$allMatches
    $fileContent = Get-Content $file.FullName -Raw
    $usedPermissions = [regex]::Matches($fileContent, "'([^']+)'") | ForEach-Object { $_.Groups[1].Value }
    $matchedPermissions = $usedPermissions | Where-Object { $permissions -contains $_ }
    if ($matchedPermissions) {
        $allMatches += "=== $($file.Name) ==="
        $allMatches += $matchedPermissions
    }
}
$allMatches | Out-File "C:\Users\user1\Documents\All_Match_Results.txt" -Encoding utf8

内容的提问来源于stack exchange,提问作者user9529969

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:50:38