Элемент копирования Windows 7 PowerShell, если он больше - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь заархивировать старую библиотеку фотографий OSX Aperture в папку Windows. Я хочу использовать Copy-Item, чтобы разбираться со сложной структурой вложенных папок и помещать их все в плоскую папку. Я думаю, что следующая команда делает большую часть того, что я хочу:

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

Иногда оригинальный JPG находится в структуре папок. Это явно предпочтительнее для архивирования. В подпапке, которая называется предварительный просмотр, всегда есть меньший предварительный просмотр. Я хочу скопировать это, если оригинал не доступен. Предварительный просмотр и оригинал имеют одинаковое имя файла.

Итак, мне нужно, чтобы моя команда обрабатывала конфликты имен файлов следующим образом: если новый файл больше, перезапишите старый. Если это не так, ничего не делать. Есть идеи?

1 Ответ

0 голосов
/ 09 мая 2018

Возможно что-то вроде этого (не проверено):

$destination = "E:\Export"
Get-ChildItem "E:\ApertureLib\*.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 для выполнения копирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...