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

PowerShell批量复制文件:提取文件名编号并生成多份命名副本

用PowerShell批量提取编号并复制文件的解决方案

我来帮你搞定这个批量复制的需求,用PowerShell其实很容易实现,核心就是两步:精准提取文件名里的编号,然后循环执行复制操作。下面分场景给你具体的脚本和说明:

基础场景:文件名就是编号(比如001938.pdf)

如果你的原文件直接是「编号+扩展名」的格式,脚本可以非常简洁:

# 替换成你的文件所在文件夹路径
$folderPath = "C:\Your\Target\Directory"
# 定义需要生成的副本后缀(原文件保留,这里是2个副本,对应你要的3份总数量)
$copyNames = @(" 22", " Note")

# 遍历文件夹里的PDF文件(可根据需要修改扩展名,比如*.docx)
Get-ChildItem -Path $folderPath -Filter "*.pdf" | ForEach-Object {
    $fileNumber = $_.BaseName  # 直接提取文件名(不含扩展名)作为编号
    foreach ($suffix in $copyNames) {
        $newFile = Join-Path $folderPath "$fileNumber$suffix$($_.Extension)"
        # 执行复制,-Force可覆盖已存在的同名文件,可选
        Copy-Item -Path $_.FullName -Destination $newFile -Force
        Write-Host "已生成副本:$newFile"
    }
}

进阶场景:文件名包含编号(比如Report_001938_Feb.pdf)

如果编号是文件名中的一部分,用正则表达式就能精准提取。比如你要提取6位数字的编号,修改编号提取的逻辑即可:

$folderPath = "C:\Your\Target\Directory"
$copyNames = @(" 22", " Note")

Get-ChildItem -Path $folderPath -Filter "*.pdf" | ForEach-Object {
    # 用正则匹配文件名中的6位数字编号,可根据实际调整规则:
    # - \d{6} 匹配6位数字;如果是任意长度连续数字,换成 \d+
    # - ^\d+ 匹配开头的数字;\d+$ 匹配结尾的数字
    $matchResult = [regex]::Match($_.BaseName, '\d{6}')
    if ($matchResult.Success) {
        $fileNumber = $matchResult.Value
        foreach ($suffix in $copyNames) {
            $newFile = Join-Path $folderPath "$fileNumber$suffix$($_.Extension)"
            Copy-Item -Path $_.FullName -Destination $newFile -Force
            Write-Host "已生成副本:$newFile"
        }
    } else {
        Write-Warning "未在文件 $($_.Name) 中找到编号,跳过"
    }
}

实用提示

  • 测试时可以给Copy-Item加上-WhatIf参数,比如Copy-Item ... -WhatIf,这样不会实际复制文件,只会预览操作,确认逻辑正确后再去掉该参数。
  • 如果需要生成更多副本,只需在$copyNames数组里添加更多后缀即可,比如@(" 22", " Note", " Backup")会生成3个副本,加上原文件共4份。
  • 正则表达式可以灵活调整,比如你的编号是字母+数字组合,可改成[A-Z0-9]{6}之类的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:05:42