$filter = '*.dll', '*.pdb'
$copied = 0; $skipped = 0; $failed = 0
$sourceFiles = $filter | % { Get-ChildItem $sourceDir -Filter $_ -Recurse } `
| sort @{expression={$_.FullName.Length}} -Descending `
| group Name -AsHashTable
$targetFiles = $filter | % { Get-ChildItem $targetDir -Filter $_ -Recurse } `
| ? { $sourceFiles.ContainsKey($_.Name) } `
| sort FullName
$targetFiles | % {
$target = $_
$sourceFiles[$target.Name] | % {
$source = $_
if ($target.FullName.EndsWith($source.FullName.Substring($sourceDir.Length),
'InvariantCultureIgnoreCase')) {
if ($target.LastWriteTime.AddSeconds(2) -lt $source.LastWriteTime) {
Write-Host $target.FullName
try {
Copy-Item $source.FullName $target.FullName -Force
$copied++
}
catch {
Write-Error $_.Message
$failed++
}
}
else {
$skipped++
}
return
}
}
}
Write-Host "$copied copied, $skipped skipped, $failed failed in $($watch.Elapsed)"
Showing posts with label PowerShell. Show all posts
Showing posts with label PowerShell. Show all posts
Sunday, November 24, 2013
Recursively search and replace files from one folder into another
Subscribe to:
Posts (Atom)