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会导致取值失败)
- 限定DP为两位字母,用
- 层级目录实现:直接构建
LocationName/DP/Category三级层级目录,完全符合需求,替代原脚本的扁平文件夹命名。 - 错误处理增强:
- 添加文件夹选择取消后的退出逻辑,避免后续无意义执行
- 用
Test-Path检查目录是否存在,配合New-Item -Force确保目录创建成功,同时避免重复创建报错 Move-Item添加-Force参数,可覆盖目标目录重名文件(不需要可直接移除该参数)
- 灵活性提升:移除原脚本中
Get-ChildItem的固定通配符过滤,改为正则匹配文件名,适配末尾冗余内容长度不固定的情况。
内容的提问来源于stack exchange,提问作者smellslikemoose
相关产品推荐
相关产品推荐

