如果文件不存在,我想递归搜索目录并将文件夹的内容移动到远程服务器并删除文件夹级别。
例如,只复制文件夹 2 的内容,因为 file.txt 不存在。
源服务器
C:\folder\folder1\foldera - test.txt file.txt
C:\folder\folder2\foldera - test.txt
会成为
目标服务器
C:\folder\folder2\ - test.txt
如果文件不存在,我想递归搜索目录并将文件夹的内容移动到远程服务器并删除文件夹级别。
例如,只复制文件夹 2 的内容,因为 file.txt 不存在。
源服务器
C:\folder\folder1\foldera - test.txt file.txt
C:\folder\folder2\foldera - test.txt
会成为
目标服务器
C:\folder\folder2\ - test.txt
对不起,我从一开始就误解了你的问题。我刚刚意识到,您复制文件的条件只有当它们存在于两个文件夹中时。
我们可以使用Compare-Object cmdlet 来实现这一点。下面的代码所做的是比较两个文件夹的列表,根据文件/目录名称检查等效项并将它们复制到目标文件夹。
$target_directory = Get-Item -Path '\\dest-server\c$\folder\folder2'
$set1 = Get-ChildItem -Path 'c:\test1' -Recurse
$set2 = Get-ChildItem -Path 'c:\test2' -Recurse
Compare-Object -ReferenceObject $set1 -DifferenceObject $set2 -Property Name -IncludeEqual -ExcludeDifferent -PassThru | ForEach-Object {
# Copy files but will not overwrite files, use -ErrorAction SilentlyContinue to suppress errors.
Copy-Item $_.FullName -Destination $target_directory.FullName -ErrorAction Continue
}
这不是有史以来最好的代码,但它应该通过细微的调整来完成这项工作:
$Tester = "C:\Dell\Drivers\Sata\Test"
$Folders = [array]$Tester.split("\")
Write-Host $Folders
$Folders |`
ForEach {
$CureToken = "$_\"
if(Test-Path -Path "$Good$CureToken")
{
$Good = "$Good$CureToken"
Write-Host $Good
}
}
Write-Host "This Path Is Good: $Good"
它返回好的路径(比原始字符串高两个目录。它看起来像:
C:\Dell\Drivers\
This Path Is Good: C:\Dell\Drivers\
您可以使用它来查看它是如何工作的,并通过少量编辑更新它以用于 UNC 路径。
你也可以使用
Copy-Item -Path $MyFileToCopy -Destination $Good
对于实际副本。