复制文件夹结构和特定文件夹的内容

Copy folder structure and content of specific folders

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

例如:

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

我可以使用:xcopy C:\OriginalDir C:\TempDir /e /t复制C:\OriginalDir的整个结构。但是,我还需要将两个 \Test 文件夹的内容也复制到新目录中。我是 xcopy 的新手,我也研究过 robocopy。有没有办法做到这一点?我试图在 powershell 中完成此操作并考虑遍历文件夹结构,但是当我最终到达测试文件夹时仍然没有存储父文件夹结构。

谢谢。

您是否尝试过 robocopy - 例如:

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

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

如果您想排除 \Other 目录(您的问题并不完全清楚),您可以执行以下操作:

  robocopy $source $dest /e /xf *

(这只是复制目录结构,没有复制文件)

robocopy $source $dest /XD C:\Other /e

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

您可以在此处找到更多信息:

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

编辑:

为了仅复制以 'Test' 开头的目录,您可以执行以下操作:

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

如果您的文件夹结构不止一层,您可以在 Get-Childitem 上使用 -recurse 开关

感谢史蒂夫让我开始并让我正确地思考这个问题。最终没有使用 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
            }
        }
    }
}