我正在尝试在Powershell上创建一个代码,该代码实际上将文件从一个位置(假设A)复制到位置B。现在位置B有两个子文件夹(分别说X和Y)。我需要将文件从A复制到B,但是在复制之前,我需要确保正在复制的文件不应位于X或Y中,以避免文件重复。如果文件存在,则不应复制该特定文件。
$PathS = Get-ChildItem -Path "\\sc-y-ap-swt-1\AutoClientFiles\reception\*.txt" |
Where-Object { $_.CreationTime -gt (Get-Date).AddDays(-1) }
$PathD = "C:\OCM\data\EverestSwift\inbound\"
$pathtest = Get-ChildItem -path "C:\OCM\data\EverestSwift\inbound\" -Recurse -File
If((Test-Path -Path "\\sc-y-ap-swt-1\AutoClientFiles\reception\*.txt") -eq $false) {
Exit
} Else {
Try {
Foreach ($File in $Pathtest){
if ($File -eq $PathS ){
Write-Host "Duplicate Files"
exit 1
}
Copy-Item -Path $PathS -Destination $PathD -Force
Exit 0
}
} catch [Exception]{
Write-Host $_.Exception.Message
Exit 1
}
}
答案 0 :(得分:0)
您可以这样做,但是为什么呢。正如Cory所说,这就是robocopy存在的原因。
您是什么意思?
文件名可以相同,但时间戳可以不同,因此即使名称相同,文件名也可以不同。因此,您应该查看名称和时间戳或文件哈希。
因此,请参阅有关此类用例的常见问题解答。
Does Robocopy SKIP copying existing files by default?
How to skip existing and/or same size files when using robocopy
RoboCopy "%%F" %destination% *.srt *.pdf *.mp4 *.jpg /COPYALL /XO /R:0
但是,使用powerShell进行此操作,您的帖子可能是该文章的重复内容。
Copy items from Source to Destination if they don't already exist
以上示例:
$Source = 'C:\SourceFolder'
$Destination = 'C:\DestinationFolder'
Get-ChildItem $Source -Recurse | ForEach {
$ModifiedDestination = $($_.FullName).Replace("$Source","$Destination")
If ((Test-Path $ModifiedDestination) -eq $False) {
Copy-Item $_.FullName $ModifiedDestination
}
}
# Or
$Source = '<your path here>'
$Dest = '<your path here>'
$Exclude = Get-ChildItem -recurse $Dest
Get-ChildItem $Source -Recurse -Filter '*' |
Copy-Item -Destination $Dest -Verbose -Exclude $Exclude