Powershell 比较两个文件夹并将差异复制到另一个文件夹中-我的代码缺少某些内容

Powershell 比较两个文件夹并将差异复制到另一个文件夹中-我的代码缺少某些内容,powershell,recursion,directory,compare,Powershell,Recursion,Directory,Compare,在这里,我试图比较两个文件夹,并递归地复制第三个文件夹中的差异 下面是我的代码,我可以完成大部分工作,但无法像在Folder1中那样将文件复制到确切的文件夹结构中。该脚本实际上直接在folder3上复制文件,而不复制任何文件夹。这只是从不同的文件夹中单独复制文件并将其放入文件夹3中。非常感谢您的帮助 $Folder1path = "M:\Technical\foldercompare\folder1" $Folder2path = "M:\Technical\fol

在这里,我试图比较两个文件夹,并递归地复制第三个文件夹中的差异

下面是我的代码,我可以完成大部分工作,但无法像在Folder1中那样将文件复制到确切的文件夹结构中。该脚本实际上直接在folder3上复制文件,而不复制任何文件夹。这只是从不同的文件夹中单独复制文件并将其放入文件夹3中。非常感谢您的帮助

$Folder1path = "M:\Technical\foldercompare\folder1"
$Folder2path = "M:\Technical\foldercompare\folder2"
$Folder3path = "M:\Technical\foldercompare\folder3"
$Folder1 = Get-childitem -path $Folder1path -Recurse
$Folder2 = Get-childitem -path $Folder2path -Recurse
Compare-Object -ReferenceObject $folder1 -DifferenceObject $Folder2
Compare-Object $Folder1 $Folder2 -Property Name, Length  | 
Where-Object {$_.SideIndicator -eq "<="} | 
ForEach-Object {
            Copy-Item "$Folder1path\$($_.name)" -Destination "$Folder3path" -Force -Recurse
}
$Folder1path=“M:\Technical\foldercompare\folder1”
$Folder2path=“M:\Technical\foldercompare\folder2”
$Folder3path=“M:\Technical\foldercompare\folder3”
$Folder1=Get childitem-path$Folder1path-Recurse
$Folder2=Get childitem-path$Folder2path-Recurse
比较对象-引用对象$folder1-差异对象$Folder2
比较对象$Folder1$Folder2-属性名称,长度|

在对象{$\.SideIndicator-eq“中,下面的脚本表示处理任务的一种方法(假设您的3个目录共享一个公共父目录)。另外,您最初的尝试未能处理
$Folder1Path
$Folder2Path
为空时出现的
$null
s

#1中而不是2中的文件应以与1中相同的dir结构结束在3中
param(
$Folder1path=“$PSScriptRoot\folder1”,
$Folder2path=“$PSScriptRoot\folder2”,
$Folder3path=“$PSScriptRoot\folder3”
)
$ErrorActionPreference=“停止”;
设置StrictMode-版本为“最新”
Get ChildItem-Path$Folder1Path-Recurse | Where对象{
[string]$toDiff=$\.FullName.Replace($Folder1path,$Folder2path)
#确定2中的内容,而不是1中的内容
[bool]$isDiff=(测试路径-路径$toDiff)-eq$false
如果($isDiff){
#创建包含文件夹结构的目标路径
$dest=$\.FullName.Replace($Folder1path,$Folder3path)
复制项-路径$\路径全名-目标$dest-详细-强制
}
}

下面的脚本表示执行任务的一种方法(假设您的3个目录共享一个公共父目录)。另外,当
$Folder1Path
$Folder2Path
为空时,您最初的尝试未能处理
$null
出现的问题

#1中而不是2中的文件应以与1中相同的dir结构结束在3中
param(
$Folder1path=“$PSScriptRoot\folder1”,
$Folder2path=“$PSScriptRoot\folder2”,
$Folder3path=“$PSScriptRoot\folder3”
)
$ErrorActionPreference=“停止”;
设置StrictMode-版本为“最新”
Get ChildItem-Path$Folder1Path-Recurse | Where对象{
[string]$toDiff=$\.FullName.Replace($Folder1path,$Folder2path)
#确定2中的内容,而不是1中的内容
[bool]$isDiff=(测试路径-路径$toDiff)-eq$false
如果($isDiff){
#创建包含文件夹结构的目标路径
$dest=$\.FullName.Replace($Folder1path,$Folder3path)
复制项-路径$\路径全名-目标$dest-详细-强制
}
}

有点有效,但收到了类似“Cloud找不到路径'**/folder3\1\1.txt'的一部分”这样的消息“-似乎它正在目标文件夹中查找需要删除的文件本身copied@pravinkumar您正在使用通配符吗?它没有在目标位置创建文件夹。创建空文件夹后,将复制文件。我有一个项目,其中文件夹结构很复杂。因此无法在我的计算机上手动创建文件夹(Win10 PS 5.1),目标中所需的文件夹是通过复制项上的-Force参数创建的。有关此方法的详细信息,请参阅此答案:还有一点是,我的主要要求不仅是查找丢失的文件,而且还要查找文件中的内容更改。这就是为什么我在我的文件中使用了-property Name,Length。这很有效,但收到了一条消息类似于“Cloud找不到路径'**/folder3\1\1.txt'的一部分”-似乎它正在目标文件夹中查找需要删除的文件本身copied@pravinkumar您正在使用通配符吗?它没有在目标位置创建文件夹。创建空文件夹后,将复制文件。我有一个项目,其中文件夹结构很复杂。因此无法在我的计算机上手动创建文件夹(Win10 PS 5.1),目标中所需的文件夹是通过复制项上的-Force参数创建的。有关此方法的详细信息,请参阅此答案:还有一个问题是,我的主要要求不仅是查找丢失的文件,还包括文件中的内容更改。这就是为什么我在我的文件中使用-property Name,Length。