如果文件夹名称匹配,我正在尝试将文件夹从一个目录复制到另一个文件夹的子目录。
起始文件夹结构如下-
Data > VR-01
整个VR-01
文件夹应这样移动到目标文件夹-
Data > VR-0-1000 > VR-01 [match this name] > Archive > [matched folder (VR-01) should go here]
VR分为具有相同目录结构的0-1000、1001-2000等不同文件夹。
$startPath = "C:\Start\Data"
$destinationPath = "C:\Destination\Data"
$DestinationFolders = Get-ChildItem -Path $destinationPath -Directory | Select -ExpandProperty FullName
# for each item in the folder that is a directory (folder)
Get-ChildItem -Path $startPath -Recurse -Directory | %{
#Get the folder name to compare it to the destination folder
$CurrentFolderName = ($_.Name)
#Find matching directory for that folder
#Where-Object
$DestinationFolders | ?{$CurrentFolderName -like $DestinationFolders}
#Copy files
Copy-Item -Path $_.FullName -Destination $DestinationFolders -WhatIf
}
我尝试使用-match
命令,但是由于\字符是我所能知道的正则表达式的一部分,因此它失败了,所以我切换到-like
。
似乎我缺少比较文件夹名称和复制文件夹名称的步骤,因为从-WhatIf
命令中我看到它只是将文件夹复制到第一个子文件夹而不匹配名称。 / p>
答案 0 :(得分:1)
我如何形象地描述您的目标是,如果VR-0-1000中存在一个VR-01子文件夹,则要在Destination \ VR-0-1000文件夹中复制源VR-01。可能不一定存在Destination\VR-0-1000\VR-n
。
我被刺了。不能保证效率,但我相信它将成功。
$startPath = "C:\Start\Data"
$destinationPath = "C:\Destination\Data"
$sourceNames = (Get-ChildItem $startPath -Recurse -Directory).Name
(Get-ChildItem $destinationPath -Directory).FullName | % {
# For each folder named 'VR-****-****'
Get-ChildItem -Path $_ | % {
# For each folder named VR-****-****\VR-****
if($sourceNames -Contains $_.Name)
{
$sourceFolder = "$startPath\$($_.Name)\*"
$destFolder = $_.FullName
Write-Output "Copying $sourceFolder into $destFolder"
Copy-Item -Path $sourceFolder -Destination $destFolder -Recurse
}
}
}
我在这样的结构上运行它
C:.
├───Dest
│ ├───VR-1-2
│ │ └───VR-01
│ └───VR-3-4
│ └───VR-03
└───Start
├───VR-01
├───VR-02
├───VR-03
└───VR-05
输出:
Copying C:\soverflowtest\Start\VR-01\* into C:\soverflowtest\Dest\VR-1-2\VR-01
Copying C:\soverflowtest\Start\VR-03\* into C:\soverflowtest\Dest\VR-3-4\VR-03