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

将含前置唯一ID的PDF批量移动至对应后置唯一ID文件夹

问题分析与修正方案

原代码存在的问题

  • 目标路径书写错误:$TargetPath = 'C\:F\Individual Folders' 里的冒号位置错误,正确格式应为 C:\F\Individual Folders
  • 文件夹筛选逻辑错误:原Filter试图匹配以ID开头的文件夹,但实际需要匹配以[ID]结尾的文件夹,且原Filter的括号语法不完整
  • 缺少错误处理:如果找不到对应文件夹,执行Move-Item会直接报错导致脚本中断

修正后的代码

$FilesToMove = 'C:\F\2024 Detailed Letters'
$TargetPath = 'C:\F\Individual Folders'

# 获取所有待移动的PDF文件
$Files = Get-ChildItem -Path $FilesToMove -Filter *.pdf -File

foreach ($File in $Files) {
    # 提取文件名开头的8位唯一ID
    $uniqueId = $File.Basename.Substring(0, 8)
    
    # 筛选以"[uniqueId]"结尾的目标文件夹
    $targetFolder = Get-ChildItem -Path $TargetPath -Directory -Filter "*[$uniqueId]" | Select-Object -First 1

    if ($targetFolder) {
        $destinationPath = Join-Path -Path $targetFolder.FullName -ChildPath $File.Name
        Write-Output "移动文件: $($File.Name) -> $($targetFolder.Name)"
        Move-Item -Path $File.FullName -Destination $destinationPath -Force
    }
    else {
        Write-Warning "未找到对应文件夹,跳过文件: $($File.Name)"
    }
}

关键修正点说明

  • 路径修正:修正目标路径的冒号位置错误,确保路径合法可识别
  • ID提取:通过$File.Basename.Substring(0,8)准确提取文件名开头的8位ID(Basename自动去除.pdf后缀,避免后缀干扰ID提取)
  • 文件夹筛选:使用*[$uniqueId]作为筛选规则,精准匹配格式为XXX_XXXX [unique ID]的文件夹(*匹配任意前缀,[$uniqueId]匹配结尾的ID部分)
  • 错误处理:增加if ($targetFolder)判断,找不到对应文件夹时输出警告并跳过,保证脚本持续执行
  • 路径拼接:用Join-Path命令安全拼接目标路径,避免手动拼接字符串出现格式问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:07:12