Если вы регулярно этим занимаетесь, я бы рекомендовал рефакторинг для использования robocopy
. После первого запуска любые последующие запуски будут намного быстрее, потому что robocopy
был разработан для выполнения этих задач. Первый запуск будет медленным независимо от того, какой инструмент вы используете.
Compare-Object
собирается сравнить значения свойств. Передавая кучу ценностей, у нее будет больше работы. Кроме того, вы не перемещаете никаких файлов во время работы этой функции, поэтому, если эта операция отменена, ваш сценарий ничего не перемещал. Если вы просто хотите сравнить список имен файлов в каждом и скопировать, если они существуют в $ref
, но не в $com
, вы можете ограничить свойства, которые вы получаете, и перебирать / перемещать каждое из них в $ ref вручную, как я. ниже.
Если вы хотите продолжать использовать Compare-Object
, посмотрите на его -Property
параметр, чтобы ограничить число сравниваемых свойств.
$path_desktop = 'C:\Files\Media\Bilder'
$path_external = 'E:\Bilder'
$path_destination = 'C:\Files\Media\Bilder\2SORT'
$ref = Get-ChildItem -path $path_desktop -Recurse -File | select name, fullname
$com = Get-ChildItem -path $path_external -Recurse -File | select name, fullname
$ref |
foreach {
if ($_.name -in $com | select -ExpandProperty name)
continue;
--Copy file
}
Вы также можете получить другие свойства файла при необходимости вы можете использовать эти свойства, когда будете выполнять сравнение (либо «вручную», либо с помощью compare-object
и итерируя по diff)
Get-ChildItem -path $path_desktop -Recurse -File | select Name,fullname, LastWriteTime
, чтобы увидеть, какие свойства возвращает Get-ChildItem, передать в свойствах Get-Member -Type
Get-ChildItem -path $path_desktop -Recurse -File | Get-Member -Type Properties