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

请求编写PowerShell脚本提取并重命名Outlook .msg文件附件

PowerShell批量提取Outlook .msg文件附件并重命名方案

以下是完全符合你需求的PowerShell脚本,只需简单修改文件夹路径就能直接使用:

# 设置要处理的.msg文件所在文件夹路径,替换成你的实际路径
$folderPath = "C:\Path\To\Your\Msg\Files"

# 创建Outlook应用对象
$outlook = New-Object -ComObject Outlook.Application

# 遍历文件夹中的所有.msg文件
Get-ChildItem -Path $folderPath -Filter *.msg | ForEach-Object {
    $msgFile = $_
    $msgFileName = $msgFile.BaseName  # 获取不带后缀的原邮件文件名
    Write-Host "正在处理: $($msgFile.Name)"

    try {
        # 打开.msg文件
        $mailItem = $outlook.Session.OpenSharedItem($msgFile.FullName)
        $totalAttachments = $mailItem.Attachments.Count

        if ($totalAttachments -eq 0) {
            Write-Host "  该邮件无附件,跳过"
            $mailItem.Close(1)  # 1 = olDiscard,不保存关闭
            return
        }

        # 逐个处理附件
        for ($i = 1; $i -le $totalAttachments; $i++) {
            $attachment = $mailItem.Attachments.Item($i)
            $fileExtension = [System.IO.Path]::GetExtension($attachment.FileName)
            # 构造新文件名:原邮件文件名_attach X of Y.原后缀
            $newFileName = "$msgFileName`_attach $i of $totalAttachments$fileExtension"
            $savePath = Join-Path -Path $folderPath -ChildPath $newFileName

            # 保存附件
            $attachment.SaveAsFile($savePath)
            Write-Host "  已保存附件: $newFileName"
        }

        # 关闭邮件,不保存更改
        $mailItem.Close(1)
    }
    catch {
        Write-Host "  处理失败: $_"
        # 确保出错时也关闭邮件对象
        if ($mailItem) { $mailItem.Close(1) }
    }
}

# 释放Outlook COM对象
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook) | Out-Null
Remove-Variable outlook
Write-Host "所有文件处理完成"

使用步骤

  1. 打开PowerShell(无需管理员权限,但要确保Outlook已关闭)
  2. 执行以下命令允许脚本运行(仅需执行一次):
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    
    按提示输入Y确认即可。
  3. 将上面的脚本复制到记事本,把$folderPath的值改成你的.msg文件所在文件夹的实际路径(比如"D:\Work\Emails")
  4. 保存文件为ExtractMsgAttachments.ps1(注意保存类型选「所有文件」,避免变成.txt)
  5. 在PowerShell中导航到脚本所在文件夹,执行:
    .\ExtractMsgAttachments.ps1
    

关键说明

  • 脚本会自动跳过无附件的邮件
  • 每一步操作都会在控制台输出状态,方便你跟踪进度
  • 出错时会显示错误信息,且不会中断整个批量处理流程
  • 处理完成后会自动释放Outlook的COM对象,避免占用系统资源

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:33:25