如何编写高效PowerShell脚本按年月批量移动.xlsx文件?
批量移动指定年月Excel报告的PowerShell脚本
刚好帮你写了个高效且健壮的脚本,完美适配你的需求——只需要在开头定义年月,就能自动找到所有对应格式的文件并移动,还加了不少容错细节:
# 定义可变的年月参数,直接修改这里即可切换目标文件 $targetMonth = "February" $targetYear = "2018" # 固定的源目录和目标路径(根据实际情况调整) $sourceRoot = "\\otnas6uk\sd.test-it.com$\PROJECTS\" $targetPath = "\\zemnas\sd.Zentic-test.com$\Technology\Reports" # 构建文件匹配规则:匹配所有以 "- 目标年月.xlsx" 结尾的Excel文件 $fileFilter = "*-$targetMonth $targetYear.xlsx" # 先检查目标目录是否存在,不存在就自动创建(避免移动失败) if (-not (Test-Path -Path $targetPath)) { New-Item -Path $targetPath -ItemType Directory -Force | Out-Null Write-Host "⚠️ 目标目录不存在,已自动创建:$targetPath" } # 一次性找出所有符合条件的文件 $matchedFiles = Get-ChildItem -Path $sourceRoot -Filter $fileFilter -File # 没找到匹配文件的话直接提示并退出 if ($matchedFiles.Count -eq 0) { Write-Warning "❌ 源目录里没找到符合格式的文件:$fileFilter" exit } # 批量移动文件,单个文件失败时单独报错,不影响其他文件 foreach ($file in $matchedFiles) { try { Move-Item -Path $file.FullName -Destination $targetPath -Force -ErrorAction Stop Write-Host "✅ 成功移动:$($file.Name)" } catch { Write-Error "❌ 移动失败:$($file.Name),错误详情:$_" } } Write-Host "`n🎉 移动操作完成,共处理 $($matchedFiles.Count) 个文件"
脚本亮点:
- 极简配置:只需要修改开头的
$targetMonth和$targetYear,就能切换要移动的目标年月文件 - 自动匹配:用通配符
*兼容任意前缀的文件名,只要结尾是"- 年月.xlsx"都能被命中 - 容错保障:
- 自动创建不存在的目标目录
- 提前检查是否有匹配文件,避免白跑一趟
- 单个文件移动失败时仅报错,不会中断整个批量操作
- 高效批量处理:一次性扫描所有符合条件的文件,适合你提到的30个文件的规模
如果需要更灵活的使用方式(比如从命令行传参,方便自动化任务),可以改成带参数的版本:
param( [Parameter(Mandatory=$true, HelpMessage="目标月份,例如:February")] [string]$Month, [Parameter(Mandatory=$true, HelpMessage="目标年份,例如:2018")] [int]$Year ) # 后续逻辑和上面一致,把$targetMonth换成$Month,$targetYear换成$Year $sourceRoot = "\\otnas6uk\sd.test-it.com$\PROJECTS\" $targetPath = "\\zemnas\sd.Zentic-test.com$\Technology\Reports" $fileFilter = "*-$Month $Year.xlsx" # ... 剩下的检查、移动逻辑和上面完全相同 ...
运行的时候直接用:.\Move-ReportFiles.ps1 -Month "February" -Year 2018,很适合加到定时任务里。
内容的提问来源于stack exchange,提问作者dcraven
相关产品推荐
相关产品推荐

