【问题标题】:Copy folder structure and content of specific folders复制特定文件夹的文件夹结构和内容
【发布时间】:2016-08-20 11:35:37
【问题描述】:

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

例如:

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

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

谢谢。

【问题讨论】:

    标签: powershell xcopy


    【解决方案1】:

    您是否尝试过 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 开关

    【讨论】:

    • 因此假设我有 15 个文件夹。我需要复制所有标有“测试”的目录及其内容。我需要能够仅将这些特定内容复制到具有正确目录结构的新位置,而不需要它们之外的任何其他内容。 exclude 选项很好,但不是我需要的,因为我必须排除大量目录,并且目录会随着时间而改变,所以我也不能硬编码它们。
    • 我已经更新了我的答案,只包含标有“test”的目录。
    【解决方案2】:

    感谢史蒂夫让我开始并让我正确地思考这个问题。最终手动编写脚本而不使用 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
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多