2016-04-26 199 views
1

所以我发现xcopy对复制整个文件夹结构非常有帮助。但我也需要将特定文件夹的内容复制到新目录中。复制特定文件夹的文件夹结构和内容

例如:

1. C:\OriginalDir 
- \This 
    * \Test 
- \That 
    * \Test 
- \Other 

我可以使用:xcopy C:\OriginalDir C:\TempDir /e /t复制C:\OriginalDir的整个结构。但是,我也需要将\Test文件夹的内容复制到新目录中。我对xcopy相当陌生,而且我也研究过robocopy。有没有办法做到这一点?我试图在PowerShell中实现这一点,并考虑迭代文件夹结构,但是当我最终到达Test文件夹时仍然不存储父文件夹结构。

谢谢。

回答

1

感谢Steve让我开始并让我正确地思考这个问题。无需使用RoboCopy或Xcopy手动完成脚本编写,因为我无法让它们按照我想要的方式工作。

$target = "C:\\TestTemp" 
foreach($item in (Get-ChildItem "C:\\OriginalDir\\This" -Recurse)){ 

    if ($item.PSIsContainer -and ($item.Name -eq "obj" -or $item.Name -eq "bin")){ 
     $tempPath = $target 
     $path = $item.FullName 
     $trimmed = $path.TrimStart("C:\\OriginalDir") 
     $pieces = $trimmed.Split("\\"); 

     foreach($piece in $pieces){ 

      $tempPath = "$tempPath\$piece" 
      New-Item -ItemType Directory -Force -Path "$tempPath" 
      if($piece -eq "Test" -or $piece -eq "Temp"){ 
      Copy-Item -path $path\** -Destination $tempPath -Recurse -force 
      } 
     } 
    } 
} 
2

你试过ROBOCOPY - 例如:

$source = "C:\Your\Source\Directory" 
$dest = "C:\Your\Destination\Directory" 
robocopy $source $dest /e 

的 'E' 开关将复制子目录及其内容(包括空的子目录)。

如果你想排除\其它目录(这不是从你的问题完全清楚),你可以做到以下几点:

robocopy $source $dest /e /xf * 

(这只是复制的目录中没有文件复制结构)
robocopy $source $dest /XD C:\Other /e 

(这将文件复制,但不包括命名的目录)

你可以在这里找到更多的信息:

https://technet.microsoft.com/en-GB/library/cc733145.aspx

编辑:

为了只复制与“测试”开头的目录,你可以做到以下几点:

$exclude = gci C:\OriginalDir -ad | ?{ $_.Name -notlike 'Test*' 
    robocopy $source $dest /XD $exclude /e 

如果你的文件夹结构是多个级别deept,您可以使用Get-Childitem上的-recurse开关

+0

因此,例如,让我们假设我有15个文件夹。我需要复制标有“测试”及其内容的所有目录。我需要能够将这些特定内容复制到具有正确目录结构的新位置,而不需要其他任何内容。排除选项很好,但不是我所需要的,因为我必须排除大量目录,并且目录会随着时间而改变,所以我不能只是硬编码它们。 – ace

+0

我已经更新了我的答案,仅包含标有'test'的目录。 – Steve

相关问题