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

PowerShell保留目录最新5个版本脚本运行后文件夹为空问题排查

问题定位

核心原因是复制文件夹时参数配置错误,同时存在多个逻辑隐患:

  • Copy-Item 缺少 -Recurse 参数:PowerShell 默认复制文件夹仅会创建空的同名目录,不会递归拷贝内部的子文件、子目录,这是你得到空文件夹的直接原因。
  • 无临时目录存在性校验:如果 D:\temp1 目录不存在,复制操作会直接报错,进一步导致后续逻辑异常。
  • 冗余代码:你定义的 $limit 变量全程未被使用,属于无效代码。
  • 风险逻辑:复制操作未做结果校验就直接清空原目录,一旦复制失败会导致所有发行版丢失。
修正后的完整脚本
$path = "D:\ProfileServiceQAT"
$Temp = "D:\temp1"
# 配置保留的最新发行版数量
$keepCount = 5

# 临时目录不存在时自动创建
if (-not (Test-Path $Temp)) {
    New-Item -ItemType Directory -Path $Temp | Out-Null
}

# 获取按创建时间倒序排列的前5个待保留目录
$foldersToKeep = Get-ChildItem -Path $path -Directory | Sort-Object CreationTime -Descending | Select-Object -First $keepCount

# 递归复制目录及所有内部内容,Force参数用于覆盖已存在的同名资源
$foldersToKeep | Copy-Item -Destination $Temp -Recurse -Force

# 校验复制结果,全部复制成功后再执行后续删除、移动操作
$copySuccess = $true
foreach ($folder in $foldersToKeep) {
    $tempFolderPath = Join-Path $Temp $folder.Name
    if (-not (Test-Path $tempFolderPath) -or (Get-ChildItem $tempFolderPath | Measure-Object).Count -eq 0) {
        $copySuccess = $false
        Write-Error "目录 $($folder.FullName) 复制失败,已终止操作避免数据丢失"
        break
    }
}

if ($copySuccess) {
    # 清空原目录所有内容
    Remove-Item -Path "$path\*" -Recurse -Force
    # 将保留的目录移回原路径
    Move-Item -Path "$Temp\*" -Destination $path -Force
    # 清空临时目录残留内容
    Remove-Item -Path "$Temp\*" -Recurse -Force
}

内容的提问来源于stack exchange,提问作者Surya8985

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:27:03