Я хочу скопировать множество файлов во многие папки с одного жесткого диска A на другой жесткий диск B.
Как я могу скопировать только файлы из A в B и пропустить копию, если файлы уже существуют в B?
Это возможно с xcopy?
Я хочу скопировать множество файлов во многие папки с одного жесткого диска A на другой жесткий диск B.
Как я могу скопировать только файлы из A в B и пропустить копию, если файлы уже существуют в B?
Это возможно с xcopy?
Вы можете передать результаты рекурсивного GCI источника, проверить, является ли это папкой или файлом, а затем использовать этот объект для проверки пути, чтобы проверить, присутствует ли он в целевой папке.
что-то вроде ...
# Initial setup defaults
$Start = Date # Uses this start time at the end to calculate how long the process took!
$src = 'C:\Original Folder'
$dest = 'D:\New Folder'
Get-ChildItem -Path $src -Recurse |
% {
If ($_.PSIsContainer)
{ If (Test-Path (Join-Path (Join-Path $dest $_.Parent.FullName.SubString($src.Length)) $_.BaseName)){
}Else{
$_ | Copy-Item -Destination {Join-Path $dest $_.Parent.FullName.Substring($src.length)} -Force #-Whatif
}
}Else{
If (Test-Path (Join-Path $dest $_.FullName.SubString($src.Length))){
}Else{
$_ | Copy-Item -Destination {Join-Path $dest $_.FullName.Substring($src.length)} -Force #-Whatif
}
}
} -ErrorAction Continue
$End = Date
$TimeDiff = New-TimeSpan $Start $End
$Difference = "{0:G}" -f $TimeDiff
Write-Host " Scan time " $Difference " [(Days) Hours Minutes Seconds]"
Если тестовый путь к файлу успешен, но у вас есть файлы с одинаковыми именами, но с разными временными метками, вам нужно будет выполнить какое-то сравнение файлов или проверить время последней записи файла примерно так:
If ($_.LastWriteTime -gt ((Join-Path $dest $_.FullName.SubString($src.Length)).LastWriteTime)){ $_ | Copy-Item -Destination {Join-Path $dest $_.FullName.Substring($src.length) }}