如何在PowerShell中比较两个文件夹并创建缺少的子文件夹

时间:2019-03-21 18:23:35

标签: windows powershell

嗨,

在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           <=

鉴于上面的输出,我以为我可以将比较对象命令的输出直接通过管道传递到New-Item cmdlet,但这似乎对我不起作用。

我如何实现我的目标-即创建目标目录中缺少的“ B1”文件夹?

2 个答案:

答案 0 :(得分:2)

遵循您的方法,仅朝目的地的方向 您可以这样做:

$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 :(得分:1)

尝试

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

Get-ChildItem $DirSource -directory -Recurse | %{New-Item $_.FullName.Replace($DirSource, $DirDestination) -ItemType Directory -Force}