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

如何用PowerShell编写脚本提取文件名、格式化名称并生成对应CSV?

PowerShell 文件重命名预处理脚本实现与解析

需求拆解

  • 用Get-ChildItem获取指定路径下的文件
  • 提取文件名中@符号前的内容(如andrea.figuera@gmail.com.pst提取andrea.figuera)
  • 格式转换:首字母及句号后的字母大写(andrea.figuera→Andrea.Figuera),再去除句号(Andrea.Figuera→AndreaFiguera)
  • 生成包含FileName(原文件名)和Name(转换后名称)的CSV文件,用于后续重命名

完整脚本实现

# 指定目标路径
$targetPath = "C:\Your\Target\Path"

# 获取文件并处理每个对象
Get-ChildItem -Path $targetPath -File | ForEach-Object {
    # 正则匹配@前的内容
    if ($_.BaseName -match '^(.*?)@') {
        $extractedName = $matches[1]
        
        # 首字母及句号后字母大写
        $capitalizedName = $extractedName -replace '^(.)|(\.\w)', {
            if ($args[0].Groups[1].Success) {
                $args[0].Groups[1].Value.ToUpper()
            } else {
                $args[0].Groups[2].Value.Substring(1).ToUpper()
            }
        }
        
        # 去除句号
        $finalName = $capitalizedName -replace '\.', ''
        
        # 输出对象供CSV生成
        [PSCustomObject]@{
            FileName = $_.Name
            Name     = $finalName + $_.Extension
        }
    }
} | Export-Csv -Path "$targetPath\RenameMap.csv" -NoTypeInformation -Encoding UTF8

关键命令解析

1. 正则匹配@前内容

$_.BaseName -match '^(.*?)@'
  • ^(.*?)@:^匹配字符串开头,.*?是非贪婪匹配,会捕获从开头到第一个@的所有内容,避免文件名含多个@时匹配错误
  • 匹配成功后,结果存于$matches[1]中,这就是需要提取的核心内容

2. 大小写转换逻辑

$capitalizedName = $extractedName -replace '^(.)|(\.\w)', { ... }
  • 正则^(.)|(\.\w):同时匹配两个模式:
    • ^(.):字符串的第一个字符
    • (\.\w):句号后跟的单个字母数字字符
  • 脚本块{ ... }:对每个匹配项做针对性处理:
    • 如果匹配的是字符串首字符(Groups[1]匹配成功),直接转大写
    • 如果匹配的是句号后的字符(Groups[2]匹配成功),跳过句号本身,将后续字符转大写

3. 生成CSV文件

[PSCustomObject]@{ ... } | Export-Csv ...
  • [PSCustomObject]构造自定义对象,明确包含原文件名和转换后的新文件名两个字段
  • Export-Csv将对象集合导出为CSV文件,-NoTypeInformation避免生成PowerShell类型信息行,-Encoding UTF8确保特殊字符正常显示

验证与注意事项

  • 单独测试正则匹配:运行"andrea.figuera@gmail.com" -match '^(.*?)@'; $matches[1],确认提取结果正确
  • 测试大小写转换:运行"andrea.figuera" -replace '^(.)|(\.\w)', { if ($args[0].Groups[1].Success) { $args[0].Groups[1].Value.ToUpper() } else { $args[0].Groups[2].Value.Substring(1).ToUpper() } },查看转换效果
  • 生成CSV后先核对内容,确认无误后,可结合Import-Csv和Rename-Item实现自动批量重命名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 22:22:31