求可将*.msg文件上移一级存放到对应项目ID目录的PowerShell脚本
PowerShell 批量移动.msg文件脚本
完整可运行代码
$src = "..\Host Folder" # 仅递归扫描后缀为.msg的文件,避免误操作其他类型文件 $msgFiles = Get-ChildItem -Path $src -Filter "*.msg" -File -Recurse foreach ($file in $msgFiles) { # 获取.msg文件当前所在的字母子文件夹名称 $subFolderName = $file.Directory.Name # 获取对应项目ID目录路径(文件移动的目标目录) $targetFolder = $file.Directory.Parent.FullName # 构造默认目标文件路径 $targetFilePath = Join-Path -Path $targetFolder -ChildPath $file.Name # 重名冲突处理:目标目录已存在同名文件时,用原字母子文件夹名区分 if (Test-Path -Path $targetFilePath -PathType Leaf) { $newFileName = "{0}({1}){2}" -f $file.BaseName, $subFolderName, $file.Extension $targetFilePath = Join-Path -Path $targetFolder -ChildPath $newFileName } # 执行移动,首次运行可添加 -WhatIf 参数预览移动结果,确认无误后删除即可 Move-Item -Path $file.FullName -Destination $targetFilePath -Force } # 可选功能:移动完成后自动清理空的字母子文件夹,不需要可直接注释删除 Get-ChildItem -Path $src -Directory -Recurse | Where-Object { $_.GetFiles().Count -eq 0 -and $_.GetDirectories().Count -eq 0 } | Remove-Item -Force
功能说明
- 自动识别层级:只会将.msg文件上移一级到所属的项目ID目录,不会移动到Host Folder根目录,完全保留项目ID层级
- 自动处理重名:同一项目ID下的同名.msg文件会自动添加原所在字母文件夹名作为后缀区分,无重名则保留原文件名
- 可选空目录清理:可以自动删除移动后无文件的空字母子文件夹
调试提示
首次验证时可在Move-Item行末尾添加-WhatIf参数,执行后只会输出移动预览结果,不会实际执行移动操作,确认规则符合预期后再删除-WhatIf参数正式运行即可。
内容的提问来源于stack exchange,提问作者Louie Boyd
相关产品推荐
相关产品推荐

