因此,我有两个单独的服务器,我需要同步具有相同名称的目录,但目录结构不同。
例如,一台服务器为\\calafs01\GFX_Drop\x\*
x是GFX_Drop中的任何目录,我希望复制其所有子文件夹及其内容(仅适用于修改和新文件)
另一台服务器为\\calamedia\edit\y\x\*
y是我们的用户使用的组织类别。
我需要将calafs01上以x开头的所有内容复制到calamedia,但是由于y的存在,这非常困难。
我可以轻松地创建一个包含所有x值的数组:
$Projects = Get-ChildItem \\calafs01\GFX_Drop | %{$_.name}
,但是问题在于,脚本要在calamedia上要复制到的y目录中找到目录x。
假设一次使用robocopy,我可以弄清楚该怎么做...
预先感谢
根据NAS的答案进行编辑:
所以我很傻,意识到在calamedia中还有一个x后面的目录,但是它总是叫做GFX,所以目标路径实际上是\\calamedia\edit\y\x\GFX\*
假设这将是一个简单的添加...所以拿走了脚本并执行了以下操作:
$get_y = Get-ChildItem -Directory -Path \\calamedia\edit | Get-ChildItem -Directory # get all dirs one level deeper
Get-ChildItem -Directory -Path \\calafs01\GFX_Drop\ | ForEach-Object { # get all folders 'x'
$dest_y = $get_y | Where-Object -Property Name -eq $_.Name # match folder names
if ($dest_y) {
Copy-Item -Path $_.FullName -Recurse -Destination "$dest_y.Parent.FullName/GFX" -Force -WhatIf
# or robocopy if you need to copy modified/new files only
}
}
基本上只是将/GFX
添加到$dest_y.Parent.FullName
的末尾(带引号),认为这样做可以,但是现在它在目标位置被绊倒了。扩展目录时是否出现语法错误?
编辑2:
知道了。
PS C:\Users\chris.slagel> $get_y = Get-ChildItem -Directory -Path \\calamedia\edit | Get-ChildItem -Directory # get all dirs one level deeper
Get-ChildItem -Directory -Path \\calafs01\GFX_Drop\ | ForEach-Object { # get all folders 'x'
$dest_y = $get_y | Where-Object -Property Name -eq $_.Name # match folder names
if ($dest_y) {
Copy-Item -Path $_.FullName -Recurse -Destination "$($dest_y.Parent.FullName)\GFX" -Force -WhatIf
# or robocopy if you need to copy modified/new files only
}
}
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test Destination: \\calamedia\edit\Theatrical\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy Destination: \\calamedia\edit\Gaming\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy (2) Destination: \\calamedia\edit\Home Entertainment\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy (3) Destination: \\calamedia\edit\Home Entertainment\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy (4) Destination: \\calamedia\edit\TV & Streaming\GFX".
What if: Performing the operation "Copy Directory" on target "Item: \\calafs01\GFX_Drop\This Is A Test - Copy (5) Destination: \\calamedia\edit\VR\GFX".
看起来好像正确地找到了类别文件夹,但是缺少了x部分(项目名称,在本例中为“ This is a test”文件夹)
例如,第一个目的地应为\\calamedia\edit\Theatrical\This Is A Test\GFX
答案 0 :(得分:0)
$get_y = Get-ChildItem -Directory -Path \\calamedia\ | Get-ChildItem -Directory # get all dirs one level deeper
Get-ChildItem -Directory -Path \\calafs01\GFX_Drop\ | ForEach-Object { # get all folders 'x'
$dest_y = $get_y | Where-Object -Property Name -eq $_.Name # match folder names
if ($dest_y) {
Copy-Item -Path $_.FullName -Recurse -Destination $dest_y.Parent.FullName -Force -WhatIf
# or robocopy if you need to copy modified/new files only
}
}