IT管理员求PowerShell脚本优化:实现每日扫描文件自动归档
扫描文件归档PowerShell脚本优化
需求说明
- 每日夜间运行脚本处理
Scans文件夹,仅当文件夹内存在文件(不含子文件夹)时执行操作:- 创建以
MM-dd-yyyy格式当前日期命名的文件夹 - 将当日创建的文件移至该日期文件夹
- 将日期文件夹移入
Scans\Archive子文件夹 - 当日无文件则不执行任何操作
- 创建以
现有脚本问题
你编写的脚本存在几处逻辑错误,会导致执行异常:
- 路径拼接错误:
$DestinationFolder缺少反斜杠,生成的路径不符合预期 Get-ChildItem路径错误:匹配的是根目录下以Scans开头的文件,而非Scans文件夹内的内容- 未判断当日是否有文件就创建文件夹,会生成空的归档文件夹
- 误用
LastWriteTime判断,需求是筛选当日创建的文件,应使用CreationTime - 未排除
Archive子文件夹,可能误处理归档内的旧文件
优化后的脚本
# 定义核心路径 $scansFolder = "C:\Users\Admin\Desktop\Scans" $archiveFolder = Join-Path -Path $scansFolder -ChildPath "Archive" $currentDate = Get-Date -Format MM-dd-yyyy $dateFolderPath = Join-Path -Path $scansFolder -ChildPath $currentDate # 获取当日创建的文件(仅筛选文件,排除子文件夹) $todayFiles = Get-ChildItem -Path $scansFolder -File | Where-Object { $_.CreationTime.Date -eq (Get-Date).Date } # 存在当日文件时才执行后续操作 if ($todayFiles.Count -gt 0) { # 创建日期文件夹(仅当不存在时) if (-not (Test-Path -Path $dateFolderPath)) { New-Item -ItemType Directory -Path $dateFolderPath | Out-Null Write-Host "创建日期文件夹:$dateFolderPath" } # 移动当日文件到日期文件夹 foreach ($file in $todayFiles) { Move-Item -Path $file.FullName -Destination $dateFolderPath -Force Write-Host "已移动文件:$($file.Name)" } # 将日期文件夹移入归档目录 Move-Item -Path $dateFolderPath -Destination $archiveFolder -Force Write-Host "已将日期文件夹归档至:$archiveFolder" } else { Write-Host "当日无扫描文件,脚本终止执行" }
关键优化点
- 用
Join-Path自动拼接路径,避免手动输入反斜杠的错误 - 明确筛选文件和当日创建的条件,排除子文件夹和旧文件
- 先判断是否存在当日文件,再创建文件夹,避免生成空归档目录
- 添加
-Force参数,确保移动操作可覆盖同名文件(若存在) - 用
Out-Null抑制不必要的输出,保持日志简洁清晰
内容的提问来源于stack exchange,提问作者Marcos
相关产品推荐
相关产品推荐

