Как сравнить две папки и создать недостающие подпапки в PowerShell - PullRequest
1 голос
/ 21 марта 2019

Привет, ребята,

В PowerShell я хотел бы сравнить две папки; [Папка1] и [Папка2], и для каждой папки, отсутствующей в [Папка1], создайте ее в [Папка2]. Как мне это сделать?

Например:

> tree .
├───Folder1
│   ├───A0
│   ├───A1
│   ├───B0
│   └───B1
└───Folder2
    ├───A0
    ├───A1
    └───B1

Вот что я пробовал до сих пор:

Я назначил исходную и целевую папки и получил список папок в каждой из них следующим образом:

$Source = "C:\Temp\Folder1"
$Destination = "C:\Temp\Folder2"
$SrcObj = Get-ChildItem $Source
$DestObj = Get-ChildItem $Destination

Затем я сравнил две папки, как таковые:

Compare-Object -ReferenceObject $SrcObj -DifferenceObject $DestObj

Что привело к следующему выводу:

InputObject  SideIndicator
-----------  -------------
B1           <=

Учитывая вышеприведенный вывод, я подумал, что мог бы затем перенаправить вывод команды Compare-Object непосредственно в командлет New-Item, но, похоже, это не работает для меня.

Как мне достичь своей цели - создать папку «B1», которая отсутствует в каталоге назначения?

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Следуя вашему подходу и только в направлении к месту назначения, вы можете сделать:

$Source      = "C:\Temp\Folder1"
$Destination = "C:\Temp\Folder2"
$SrcObj      = Get-ChildItem $Source -Dir
$DestObj     = Get-ChildItem $Destination -Dir

Compare-Object -Ref $SrcObj -Diff $DestObj -Property Name |
  Where-Object SideIndicator -eq '<=' |
    New-Item -ItemType Directory -Path {Join-Path $Destination $_.Name} -WhatIf

Если выходной сигнал выглядит нормально, удалите трейлинг -WhatIf

1 голос
/ 21 марта 2019

попробуйте

$DirSource="C:\temp\Folder1"
$DirDestination="C:\temp\Folder2"

Get-ChildItem $DirSource -directory -Recurse | %{New-Item $_.FullName.Replace($DirSource, $DirDestination) -ItemType Directory -Force}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...