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

Windows 7 PowerShell:Copy-Item按大小处理复制冲突及优先级复制需求

解决方案:按文件大小优先复制JPG到扁平文件夹

这个需求太贴合照片归档的实际场景了——优先保留原始大图,只有当没有原始图的时候才用预览图填充。你的原始Copy-Item命令没法实现按大小判断覆盖的逻辑,咱们可以用PowerShell的循环遍历+大小对比来搞定,具体实现如下:

完整脚本

# 配置源文件夹和目标文件夹路径
$sourcePath = "E:\ApertureLib"
$destinationPath = "E:\Export"

# 确保目标文件夹存在,不存在就创建
if (-not (Test-Path -Path $destinationPath)) {
    New-Item -ItemType Directory -Path $destinationPath | Out-Null
}

# 递归获取所有JPG文件,按文件大小从大到小排序(大图先处理)
$allJpgFiles = Get-ChildItem -Path $sourcePath -Filter "*.jpg" -Recurse | Sort-Object -Property Length -Descending

# 逐个处理每个JPG文件
foreach ($file in $allJpgFiles) {
    $targetFile = Join-Path -Path $destinationPath -ChildPath $file.Name
    
    if (Test-Path -Path $targetFile) {
        # 目标已存在同名文件,对比大小
        $existingFileSize = (Get-Item -Path $targetFile).Length
        if ($file.Length -gt $existingFileSize) {
            # 当前文件更大,覆盖已有文件
            Copy-Item -Path $file.FullName -Destination $targetFile -Force
            Write-Host "✅ 覆盖:$($file.Name) | 原大小:$existingFileSize 字节 → 新大小:$($file.Length) 字节"
        } else {
            # 当前文件更小,跳过
            Write-Host "❌ 跳过:$($file.Name) | 当前文件更小,不覆盖已有文件"
        }
    } else {
        # 目标无同名文件,直接复制
        Copy-Item -Path $file.FullName -Destination $targetFile
        Write-Host "📤 复制:$($file.Name)"
    }
}

核心逻辑说明

  1. 优先处理大图:通过Sort-Object -Property Length -Descending把所有JPG按大小降序排列,这样原始大图会先被复制到目标文件夹,后续遇到同名的小预览图时就会直接跳过,完美实现“原始图优先”的需求。
  2. 大小判断覆盖:每次处理文件前先检查目标是否存在同名文件,只有当前文件比已有文件更大时,才用-Force参数覆盖,否则直接跳过。
  3. 容错处理:开头先检查目标文件夹是否存在,避免复制时因为文件夹不存在报错;同时加入了控制台输出,方便你实时查看每个文件的处理状态。

可选调整

  • 如果需要包含.jpeg格式,把-Filter "*.jpg"改成-Include "*.jpg", "*.jpeg"即可
  • 如果你不需要控制台输出,可以删掉所有Write-Host行,提升处理速度
  • 若要处理大量文件,可考虑添加-ErrorAction SilentlyContinue到Copy-Item命令中,忽略偶尔的权限或文件占用错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:45:36