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

PowerShell技术问询:如何在Excel列中按指定格式输出文件名且不重命名原文件

解决PowerShell中文件名格式转换并写入Excel的问题

没问题,我来帮你搞定这个文件名格式转换的需求!你不需要修改原文件,只需要在写入Excel时对文件名做字符串处理就行,核心是从现有文件名里拆分出需要的两部分,再调换顺序拼接。

思路分析

你的文件名格式是ABxxxx.yyy(xxxx是4位数字,yyy是3位扩展名),目标格式是yyy-xxxx,所以我们需要:

  1. 提取扩展名(去掉开头的.)
  2. 提取Basename中AB后面的4位数字
  3. 把这两部分用-连接起来

方法一:字符串截取(适合固定前缀的情况)

如果你的文件名都是AB开头的固定格式,直接用字符串截取最直接:

# 记得先初始化行号,比如从第2行开始(假设第1行是表头)
$i = 2

ForEach ($file in $files){
    $location = Join-Path $root $file  # 推荐用Join-Path代替字符串拼接,避免路径分隔符问题
    # 处理文件名格式
    $ext = $file.Extension.TrimStart('.')  # 获取扩展名并去掉开头的点,比如从".123"得到"123"
    $numPart = $file.BaseName.Substring(2, 4)  # 从Basename的第3个字符开始取4位(AB后面的四位数字)
    $formattedFileName = "$ext-$numPart"
    
    $column = 1
    $workbook.Cells.Item($i, $column) = $formattedFileName
    $i++  # 递增行号,避免所有内容写到同一行
}

方法二:正则表达式(更灵活的格式匹配)

如果以后文件名前缀可能变化,但整体结构还是[前缀][4位数字].[3位数字],用正则表达式匹配会更健壮:

$i = 2

ForEach ($file in $files){
    $location = Join-Path $root $file
    # 用正则匹配文件名,捕获4位数字和3位扩展名
    if ($file.Name -match '^AB(\d{4})\.(\d{3})$') {
        # 调换捕获组的顺序,拼接成目标格式
        $formattedFileName = "$($matches[2])-$($matches[1])"
    } else {
        # 遇到不符合格式的文件,可以设置默认显示值或者跳过
        $formattedFileName = $file.Name
        Write-Warning "文件名 $($file.Name) 不符合格式,已使用原名称"
    }
    
    $column = 1
    $workbook.Cells.Item($i, $column) = $formattedFileName
    $i++
}

小提醒

  • 别忘了初始化并递增$i,不然所有文件的名称都会写到Excel的同一行里
  • 用Join-Path拼接路径比直接用+更可靠,能自动处理不同系统的路径分隔符问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 17:47:36