我有一个非常基本的PowerShell复制脚本,可以将项目从源文件夹复制到目标文件夹.但是这会移动太多的数据,我想检查文件名是否已经存在,以便可以忽略该文件.我不需要像验证创建日期/校验和/等那样复杂.
目前它的行列如下:
Copy-Item source destination -recurse
Copy-Item source2 destination2 -recurse
Run Code Online (Sandbox Code Playgroud)
我想我需要添加Test-Path cmdlet,但我不确定如何实现它.
Ric*_*ard 13
你可以随时打电话ROBOCOPY来PowerShell.
使用/ xc(排除已更改)/ xn(排除更新)和/ xo(排除更旧)标志:
robocopy /xc /xn /xo source destination
Run Code Online (Sandbox Code Playgroud)
这将只复制那些不在目标文件夹中的文件.
有关更多选项类型 robocopy /?
以 Wai Ha Lee 的帖子为基础,这里有一个对我有用的例子:
$Source = "<your path here>"
$Dest = "<your path here>"
$Exclude = Get-ChildItem -recurse $Dest
Get-ChildItem $Source -Recurse -Filter "*.pdf" | Copy-Item -Destination $Dest -Verbose -Exclude $Exclude
Run Code Online (Sandbox Code Playgroud)
这会构建一个要排除的列表,然后将源目录和子目录中的所有 pdf 复制到单个文件夹中的目标...不包括现有文件。再说一遍,这是我的需求示例,但与您的需求类似。应该很容易调整到您满意的程度。
小智 6
虽然我同意这Robocopy是解决此类问题的最佳工具,但我完全赞成为客户提供他们所要求的东西,这是一个有趣的 PowerShell 练习。
此脚本应该按照您的要求执行:仅当文件在目标中不存在时才将文件从源复制到目标,并且具有最少的装饰。由于您在示例中使用了 -recurse 选项,因此编码比仅测试 Destination 文件夹中的文件名要多一些。
$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
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
$exclude = Get-ChildItem -recurse $dest
Copy-Item -Recurse $file $dest -Verbose -Exclude $exclude
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25287 次 |
| 最近记录: |