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

如何合并PowerShell脚本实现PHP文件属性与标题的CSV导出

解决PowerShell合并脚本导出CSV的问题

直接给你能满足所有需求的完整脚本,再拆解关键逻辑:

# 配置参数:替换成你的实际路径和要排除的子目录名
$targetDir = "C:\你的主目录路径"
$excludeSubDir = "要排除的子目录名"
$outputCsv = "C:\导出结果.csv"

# 匹配标题的正则表达式:捕获语言标识和标题内容
$titlePattern = 'short_title_(eng|fra)\s*=\s*(.*)'

# 核心逻辑:遍历文件→提取属性→匹配标题→合并输出
Get-ChildItem -Path $targetDir -Recurse -Filter *.php |
    # 过滤掉包含指定子目录的文件路径
    Where-Object { $_.FullName -notmatch [regex]::Escape($excludeSubDir) } |
    ForEach-Object {
        $file = $_
        # 读取文件内容,匹配所有符合模式的标题
        $titleMatches = Select-String -Path $file.FullName -Pattern $titlePattern -AllMatches

        if ($titleMatches.Matches.Count -gt 0) {
            # 每个匹配项生成一行数据(支持一个文件多个标题的情况)
            foreach ($match in $titleMatches.Matches) {
                [PSCustomObject]@{
                    Name           = $file.Name
                    Extension      = $file.Extension
                    FullName       = $file.FullName
                    LastWriteTime  = $file.LastWriteTime
                    TitleLanguage  = $match.Groups[1].Value
                    Title          = $match.Groups[2].Value.Trim() # 清除标题前后的空格
                }
            }
        } else {
            # 无匹配标题的文件,输出空值占位
            [PSCustomObject]@{
                Name           = $file.Name
                Extension      = $file.Extension
                FullName       = $file.FullName
                LastWriteTime  = $file.LastWriteTime
                TitleLanguage  = $null
                Title          = $null
            }
        }
    } | Export-Csv -Path $outputCsv -NoTypeInformation -Encoding UTF8

关键问题说明(为什么你之前的合并会出哈希表)

你之前用计算属性时,大概率是错误地把TitleLanguage和Title塞进了同一个计算属性的哈希表里,或者在Select-Object的计算属性中返回了嵌套结构,导致Export-Csv无法识别为独立字段,只能输出哈希表的类型名。

上面的脚本用ForEach-Object逐个处理文件,直接生成包含所有字段的扁平PSCustomObject,Export-Csv能正确解析每个属性,不会出现哈希表格式。

可选调整

  • 如果每个文件最多只有一个标题,去掉foreach循环,直接取$titleMatches.Matches[0]即可。
  • 若不需要保留无标题的文件,删掉else块的内容。
  • 正则表达式可根据实际情况调整,比如标题包含引号的话,可修改为short_title_(eng|fra)\s*=\s*["']?(.*?)["']?来匹配带引号的标题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 20:12:43