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

基于前缀将PDF文件移至对应目录的PowerShell脚本需求

PowerShell脚本实现PDF文件按规则分类移动

需求说明

当前目录存在一批PDF文件,命名格式示例如下:

PLA_01005_A.pdf
PLA_09003_A.pdf
PLA_11234_B.pdf
PLA_16555_A.pdf
...
PCA_02222_C.pdf
PCA_05555_A.pdf
PCA_06666_A.pdf
...

需要将这些文件移动到V盘已有的目录结构中,目标目录示例:

V:\PLA\PLA_01\
V:\PLA\PLA_02\
...
V:\PLA\PLA_16\

V:\PCA\PCA_01\
V:\PCA\PCA_02\
...
V:\PCA\PCA_06\

核心要求:

  • 提取文件名前3个字符作为一级目录名(如PLA、PCA)
  • 提取文件名前5个字符作为子目录名(如PLA_01、PCA_02)
  • 移动时无提示覆盖现有文件
  • 实现两种处理逻辑:
    1. 变体1:目标目录不存在则保留文件在原目录
    2. 变体2:目标目录不存在则创建目录后移动文件

用户尝试的代码:

$pla = @(1..17 | % tostring PLA_00*)
#$pla2 = @("PLA\\"+$pla)
$pla2 = @(1..17 | % tostring V:\\_pdf\\PLA\\PLA_00)
$dest = "V:\_pdf\$($dest)"
Get-ChildItem -Recurse -Include *.pdf -Filter '$pla' | Move-Item -Force -Verbose -Destination '$pla2'

解决方案

变体1:目标目录不存在则保留原文件

# 获取当前目录下所有PDF文件
Get-ChildItem -Path . -Filter *.pdf -File | ForEach-Object {
    # 提取一级目录名(前3个字符)
    $topDir = $_.Name.Substring(0, 3)
    # 提取子目录名(前5个字符)
    $subDir = $_.Name.Substring(0, 5)
    # 拼接完整目标路径
    $targetPath = Join-Path -Path "V:\$topDir" -ChildPath $subDir

    # 检查目标目录是否存在
    if (Test-Path -Path $targetPath -PathType Container) {
        # 目录存在则移动文件,-Force实现无提示覆盖
        Move-Item -Path $_.FullName -Destination $targetPath -Force -Verbose
    }
    # 目录不存在则不做处理,文件保留在原目录
}

变体2:目标目录不存在则创建后移动文件

# 获取当前目录下所有PDF文件
Get-ChildItem -Path . -Filter *.pdf -File | ForEach-Object {
    # 提取一级目录名(前3个字符)
    $topDir = $_.Name.Substring(0, 3)
    # 提取子目录名(前5个字符)
    $subDir = $_.Name.Substring(0, 5)
    # 拼接完整目标路径
    $targetPath = Join-Path -Path "V:\$topDir" -ChildPath $subDir

    # 确保目标目录存在(不存在则创建)
    if (-not (Test-Path -Path $targetPath -PathType Container)) {
        New-Item -Path $targetPath -ItemType Directory -Force | Out-Null
    }
    # 移动文件,-Force实现无提示覆盖
    Move-Item -Path $_.FullName -Destination $targetPath -Force -Verbose
}

代码说明

  • 使用Get-ChildItem精准获取当前目录下的PDF文件(-File只取文件,避免目录干扰)
  • 通过Substring提取文件名指定长度的字符作为目录名,适配所有符合命名规则的文件
  • Join-Path安全拼接路径,避免手动拼接出现的格式问题
  • -Force参数实现移动时无提示覆盖现有文件,同时在New-Item中用于创建多级目录(如果需要)
  • 变体1通过Test-Path判断目录存在才移动;变体2自动创建缺失的目录后移动

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:47:27