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

求修正PowerShell脚本:按类型复制最新备份文件并删除目标旧文件

PowerShell脚本修正:复制最新备份文件并清理旧文件

原脚本存在的问题

  • 删除命令路径错误:直接拼接$Folder会输出DirectoryInfo对象的完整名称而非仅文件夹名;且通配符写法冗余,$fType已包含*.前缀,无需再写*.$fType
  • Sort-Object参数错误:使用$_.CreationTime作为排序属性是错误的,应直接指定属性名CreationTime
  • Copy-Item目标路径错误:Join-Path的用法不符合语法,且未确保目标目录存在,导致复制失败
  • 缺少目录存在性检查:删除或复制前未验证目标目录是否存在,会触发异常

修正后的脚本

# 定义源目录和目标目录
$Source = "D:\Fullbackups"
$Destination = "X:"

# 要处理的文件类型数组
$Filetype = @("*.vbk", "*.vbm", "*.bco")

# 遍历源目录下的所有子文件夹
foreach ($Folder in Get-ChildItem $Source -Directory) {
    # 构建当前文件夹对应的目标路径
    $targetFolderPath = Join-Path -Path $Destination -ChildPath $Folder.Name
    
    # 确保目标文件夹存在,不存在则创建
    if (-not (Test-Path -Path $targetFolderPath)) {
        New-Item -Path $targetFolderPath -ItemType Directory | Out-Null
    }

    # 遍历每种文件类型
    foreach ($fType in $Filetype) {
        # 删除目标目录中当前类型的旧文件
        $oldFilesPath = Join-Path -Path $targetFolderPath -ChildPath $fType
        if (Test-Path -Path $oldFilesPath) {
            Remove-Item -Path $oldFilesPath -Force
        }

        # 获取当前源文件夹下该类型的最新文件
        $latestFile = Get-ChildItem -Path $Folder.FullName -Filter $fType -File | 
                      Sort-Object -Property CreationTime -Descending | 
                      Select-Object -First 1

        # 如果找到最新文件,复制到目标目录
        if ($latestFile) {
            Copy-Item -Path $latestFile.FullName -Destination $targetFolderPath -Force
        }
    }
}

关键修正说明

  • 使用Join-Path构建路径:避免手动拼接字符串导致的路径格式错误
  • 新增目标目录检查:用Test-Path和New-Item确保目录存在,防止操作失败
  • 优化文件筛选:Get-ChildItem直接加-File参数,替代Where-Object { -not $_.PSIsContainer }
  • 调整排序方式:用-Descending和Select-Object -First 1更直观获取最新文件,效果和原逻辑一致
  • 新增空值检查:确保找到文件后再执行复制,避免无文件时触发错误
  • 改用Remove-Item替代del:PowerShell推荐使用完整命令名,可读性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:52:24