使用PowerShell比较子文件夹和复制文件

使用PowerShell比较子文件夹和复制文件,powershell,compare,subdirectory,Powershell,Compare,Subdirectory,继我之前的文章之后: …我试图比较两个包含子文件夹的目录(至少有4层深)。第二个文件夹(folder2)包含我要复制到第三个文件夹(folder3)的新文件和更新文件。到目前为止,我的脚本并不像预期的那样工作。第一个问题,folder2中的子文件夹需要在folder3中创建。最好的方法是什么?此外,并非所有文件(新的或更新的)都从folder2复制到folder3 无论如何,这是我的脚本: $Folder1 = "D:\folder1" $Folder2 = "D:\folder2" $Fo

继我之前的文章之后:

…我试图比较两个包含子文件夹的目录(至少有4层深)。第二个文件夹(folder2)包含我要复制到第三个文件夹(folder3)的新文件和更新文件。到目前为止,我的脚本并不像预期的那样工作。第一个问题,folder2中的子文件夹需要在folder3中创建。最好的方法是什么?此外,并非所有文件(新的或更新的)都从folder2复制到folder3

无论如何,这是我的脚本:

$Folder1 = "D:\folder1" 
$Folder2 = "D:\folder2"
$Folder3 = "D:\folder3"

function Get-Directories ($path)
{
    $PathLength = $path.length
    gci $path -rec | % {
        Add-Member -InputObject $_ -MemberType NoteProperty -Name RelativePath -Value $_.FullName.substring($PathLength+1)
        $_
    }
}

Compare-Object (Get-Directories $Folder1) (Get-Directories $Folder2) -prop RelativePath, Name, Length |
Sort RelativePath, Name, Length -desc | % {
if ($file -ne $_.RelativePath)
{ $_ }
$file = $_.RelativePath
} | Where-Object {$_.SideIndicator -eq "=>"} | ForEach-Object {Copy-Item ("$Folder2\" + $file) -Destination ("$Folder3\" + $file) -Force}

我在下面做了一些改变,似乎解决了我的问题

function Get-Directories ($path)
{
    $PathLength = $path.length
    Get-ChildItem $path -Recurse | % {
        Add-Member -InputObject $_ -MemberType NoteProperty -Name RelativePath -Value $_.FullName.substring($PathLength+1)
        $_
    }
}

Compare-Object (Get-Directories $Folder1) (Get-Directories $Folder2) -Property RelativePath, Name, Length |
Sort RelativePath, Name, Length -desc | % {
    if ($file -ne $_.RelativePath) { $_ } } | 
    Where-Object {$_.SideIndicator -eq "=>"} | 
    ForEach-Object {
        $file = $_.RelativePath
        Echo F | xcopy "$Folder2\$file" "$Folder3\$file" /S
    }