Powershell比较对象
我试图做一个脚本比较两个目录(源,目的地),如果目标上有差异,将文件从源文件复制到目标文件。 问题是我不知道如何复制文件树。Powershell比较对象
实施例:
$s = "C:\source\client"
$t = "C:\destination\client"
$target = Get-ChildItem $t -Recurse
$source = get-childitem $s -Recurse
Compare-Object $source $target -Property Name , Length |
Where-Object { $_.SideIndicator -eq '<=' } |
foreach-object -process{
copy-item $_.FullName -destination $t
}
如果我在源文件(C:\源\客户\ BIN \ file.txt的),而不是在目标文件夹,如何是复制的文件中的代码C:\ destination \ client \ bin \ file.txt?
谢谢。
我在测试这个更多的过程。从我可以看到你的代码的逻辑是健全的。
Compare-Object $source $target -Property Name , Length |
Where-Object { $_.SideIndicator -eq '<=' } | Select-Object -ExpandProperty inputobject |
foreach-object -process{
copy-item $_.FullName -destination $t
}
一旦你拥有了比较完成管在Select-Object -ExpandProperty inputobject
的Where
后的结果,以提取文件的项目,这样就可以看到FullName
财产
复制项目有-recurse参数,可以让你指定一个目录的根目录,然后复制下面的一切它
copy-item c:\test d:\test -recurse -force
编辑: 问题是重复的任务,你不能阻止它从试图覆盖一切。您可以添加-force以实现它,但效率不高。
或者(和可能是一个更好的,更简单的方式去了解这一点),你可以调用ROBOCOPY与/ MIR开关
对于假设OP想要覆盖预先存在的文件的robocopy。在问题中,如果文件不存在于目标文件中,它只会复制文件。如果目标中的文件不同,则Robocopy会复制。我猜想robocopy是一个更优雅的解决方案。 – Matt 2014-09-12 12:29:18
我同意......实际上是编辑我的答案,以说明你的评论。至少在我提出替代方案之前,我只想回答他最初的问题。 – 2014-09-12 12:30:44
感谢分享。以下是我对搜索到的所有内容进行了比较,然后仅复制新添加的和不同的文件。
$LeftFolder = "D:\YFMS_Target"
$RightFolder = "D:\YFMS_Copy"
$LeftSideHash = @(Get-ChildItem $LeftFolder -Recurse | Get-FileHash -Algorithm MD5| select @{Label="Path";Expression={$_.Path.Replace($LeftFolder,"")}},Hash)
$RightSideHash = @(Get-ChildItem $RightFolder -Recurse | Get-FileHash -Algorithm MD5| select @{Label="Path";Expression={$_.Path.Replace($RightFolder,"")}},Hash)
robocopy $LeftFolder $RightFolder /e /xf *
Write-Host "robocopy LastExitCode: $LastExitCode"
if ($LastExitCode -gt 7) { exit $LastExitCode } else { $global:LastExitCode = $null }
Compare-Object $LeftSideHash $RightSideHash -Property Path,Hash | Where-Object { $_.SideIndicator -eq '<=' } | foreach { Copy-Item -LiteralPath (Join-Path $LeftFolder $_.Path) -Destination (Join-Path $RightFolder $_.Path) -verbose}
[使用PowerShell获取-FileHash比较两个文件夹的内容]有什么你想在'$ t'目录保存?你也可以直接拷贝一份。 'Copy-Item -Path $ s -Destination $ t -recurse -Force'如果目录非常大,这将不是理想的。这个评论更多的是关于我的第一个问题,而不是“复制项目”的评论。 – Matt 2014-09-12 12:35:04
我只想复制比较对象返回的文件或文件夹 – cmiscloni 2014-09-12 12:52:10