在将文件复制到文件夹和子文件夹之前避免文件复制

时间:2019-04-22 21:13:08

标签: powershell

我正在尝试在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
    }
}

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