首页 > 解决方案 > Windows 7 PowerShell 复制项(如果更大)

问题描述

我正在尝试将旧的 OSX Aperture 照片库存档到 Windows 文件夹。我想使用 Copy-Item 来处理复杂的嵌套文件夹结构并将它们全部转储到一个平面文件夹中。我认为以下命令可以完成我想要的大部分操作:

PS C:\> Copy-Item -Path E:\ApertureLib\*.jpg -Destination E:\Export -Recurse

有时原始 JPG 在文件夹结构中。这显然更适合归档。在名为 preview 的子文件夹中总是有一个较小的预览。如果没有原件,我想复制它。预览和原始文件具有相同的文件名。

所以,我需要我的命令来处理这样的文件名冲突:如果新文件较大,则覆盖旧文件。如果不是,什么也不做。有任何想法吗?

标签: powershell

解决方案


也许是这样的(未经测试):

$destination = "E:\Export"
Get-ChildItem "E:\ApertureLib" -Include *.jpg -Recurse | ForEach-Object {
  $destinationName = Join-Path $destination $_.Name
  if ( Test-Path -LiteralPath $destinationName ) {
    $copyTheFile = $_.Length -gt (Get-Item -LiteralPath $destinationName).Length
  }
  else {
    $copyTheFile = $true
  }
  if ( $copyTheFile ) {
    Copy-Item $_ $destinationName -WhatIf
  }
}

如果这按预期工作,您可以删除-WhatIf以执行复制。


推荐阅读