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

PowerShell技术需求:按文件名规则将文件归类至层级目录

PowerShell 文件归类脚本优化

优化后的脚本

# 选择目标文件夹
Add-Type -AssemblyName System.Windows.Forms
$folderDialog = New-Object System.Windows.Forms.FolderBrowserDialog
if ($folderDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
    $targetPath = $folderDialog.SelectedPath
} else {
    Write-Host "未选择文件夹,脚本退出"
    exit
}

# 遍历并处理符合命名规则的文件
Get-ChildItem -Path $targetPath -File | Where-Object {
    # 正则匹配文件名,捕获LocationName、DP、Category,忽略Category之后的内容
    $_.BaseName -match '^(?<LocationName>\w+)-(?<DP>[A-Za-z]{2})-(?<Category>\w+)'
} | ForEach-Object {
    # 构建层级目录路径
    $destDir = Join-Path -Path $targetPath -ChildPath "$($Matches.LocationName)\$($Matches.DP)\$($Matches.Category)"
    
    # 确保目录存在(如果已存在则跳过创建)
    if (-not (Test-Path -Path $destDir)) {
        New-Item -Path $destDir -ItemType Directory -Force | Out-Null
    }
    
    # 移动文件到目标目录
    Move-Item -Path $_.FullName -Destination $destDir -Force
}

Write-Host "文件归类完成"

优化说明

  • 路径处理优化:用Join-Path构建目录路径,避免手动拼接分隔符的错误;移除原脚本中多余的\\拼接,PowerShell会自动适配系统路径分隔符。
  • 正则匹配精准化:
    • 限定DP为两位字母,用[A-Za-z]{2}避免匹配不符合规则的文件名
    • 正则以^开头,确保从文件名起始位置匹配,避免中间字符串误匹配
    • 修正原脚本中分组大小写不匹配的问题(原正则分组为小写category,脚本中误用大写Category会导致取值失败)
  • 层级目录实现:直接构建LocationName/DP/Category三级层级目录,完全符合需求,替代原脚本的扁平文件夹命名。
  • 错误处理增强:
    • 添加文件夹选择取消后的退出逻辑,避免后续无意义执行
    • 用Test-Path检查目录是否存在,配合New-Item -Force确保目录创建成功,同时避免重复创建报错
    • Move-Item添加-Force参数,可覆盖目标目录重名文件(不需要可直接移除该参数)
  • 灵活性提升:移除原脚本中Get-ChildItem的固定通配符过滤,改为正则匹配文件名,适配末尾冗余内容长度不固定的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:05:18