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

PowerShell批量提取.msg文件按工号文件夹分类存储问题求助

PowerShell 按工号分类拷贝.msg文件解决方案

原有脚本问题定位

  • 构建目标路径时使用的$Name变量未提前赋值,导致路径拼接逻辑失效,所有文件直接写入目标根目录
  • 未正确提取每个.msg文件对应的工号目录名称(源路径下第一级子目录为工号命名)
  • 重复文件处理逻辑被注释,实际运行时重名文件会被直接覆盖,存在数据丢失风险

修正后可直接运行的脚本

# 配置源路径和目标路径(结尾不要加反斜杠)
$source = "C:\Users\damia\OneDrive\Desktop\b"
$dest = "C:\Users\damia\OneDrive\Desktop\a"

# 递归检索所有.msg文件,内置筛选效率更高适配大数据量场景
$msgFiles = Get-ChildItem -Path $source -Recurse -File -Filter "*.msg"

$msgFiles | ForEach-Object {
    # 提取对应工号:取文件相对源路径的第一级目录名即为工号
    $relativePath = $_.FullName.Substring($source.Length).TrimStart('\')
    $jobNumber = $relativePath.Split('\')[0]
    
    # 自动创建目标路径下的工号文件夹
    $targetDir = Join-Path -Path $dest -ChildPath $jobNumber
    if (-not (Test-Path -Path $targetDir)) {
        New-Item -ItemType Directory -Path $targetDir | Out-Null
    }

    # 处理重名文件,自动添加序号后缀避免覆盖
    $targetFileName = $_.Name
    $targetFilePath = Join-Path -Path $targetDir -ChildPath $targetFileName
    $i = 1
    while (Test-Path -Path $targetFilePath) {
        $targetFileName = "{0}({1}){2}" -f $_.BaseName, $i, $_.Extension
        $targetFilePath = Join-Path -Path $targetDir -ChildPath $targetFileName
        $i++
    }

    # 执行文件拷贝
    Copy-Item -Path $_.FullName -Destination $targetFilePath -Force
}

功能说明

  • 自动识别每个.msg文件对应的工号,在目标路径下自动创建对应工号文件夹,最终和源端的2万个工号目录一一对应
  • 内置重名文件兼容逻辑,同一工号下如果存在同名.msg文件,会自动添加序号后缀,不会出现覆盖丢失数据的问题
  • 检索逻辑优化,比原脚本遍历效率更高,适配2万+目录的大数据量运行场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:24:04