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

IT管理员求PowerShell脚本优化:实现每日扫描文件自动归档

扫描文件归档PowerShell脚本优化

需求说明

  • 每日夜间运行脚本处理Scans文件夹,仅当文件夹内存在文件(不含子文件夹)时执行操作:
    1. 创建以MM-dd-yyyy格式当前日期命名的文件夹
    2. 将当日创建的文件移至该日期文件夹
    3. 将日期文件夹移入Scans\Archive子文件夹
    4. 当日无文件则不执行任何操作

现有脚本问题

你编写的脚本存在几处逻辑错误,会导致执行异常:

  • 路径拼接错误:$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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 23:44:57