制作没有文件的文件夹树的副本

时间:2012-06-14 04:54:28

标签: powershell copy directory

我需要复制带有子文件夹的文件夹,但除了包含“Project”文件夹的数据外,不需要任何文件。

所以我需要做一个新的文件夹树,但它应该只包含名为“Project”的子文件夹中的文件。

好的,我的解决方案:

$folder = dir D:\ -r
$folder

foreach ($f in $folder)
{
    switch ($f.name)
    {
    "project"
    {
        Copy-Item -i *.* $f.FullName D:\test2
    }

    default
    {
    Copy-Item  -exclude *.* $f.FullName D:\test2
    }

    }
}

4 个答案:

答案 0 :(得分:4)

使用xcopy /t仅复制文件夹结构,然后分别复制Project文件夹。像这样:

'test2\' | Out-File D:\exclude -Encoding ASCII
xcopy /t /exclude:d:\exclude D:\ D:\test2
gci -r -filter Project | ?{$_.PSIsContainer} | %{ copy -r $_.FullName d:\test2}
ri d:\exclude

答案 1 :(得分:0)

使用Get-ChildItem递归文件夹并使用New-Item重新映射结构。在递归中,您可以轻松检查“项目”。

答案 2 :(得分:0)

另一种解决方案:

$source = "c:\dev"
$destination = "c:\temp\copydev"

Get-ChildItem -Path $source -Recurse -Force |
    Where-Object { $_.psIsContainer } |
    ForEach-Object { $_.FullName -replace [regex]::Escape($source), $destination } |
    ForEach-Object { $null = New-Item -ItemType Container -Path $_ -Force }

Get-ChildItem -Path $source -Recurse -Force |
    Where-Object { -not $_.psIsContainer -and (Split-Path $_.PSParentPath -Leaf) -eq "Project"} |
    Copy-Item -Force -Destination { $_.FullName -replace [regex]::Escape($source), $destination }

答案 3 :(得分:0)

首先,创建目录结构:

xcopy D:\source D:\destination /t /e

现在,遍历源目录,复制Project目录中的每个文件:

Get-ChildItem D:\Source * -Recurse |
    # filter out directories
    Where-Object { -not $_.PsIsContainer } |

    # grab files that are in Project directories
    Where-Object { (Split-Path -Leaf (Split-Path -Parent $_.FullName)) -eq 'Project' } | 

    # copy the files from source to destination
    Copy-Item -Destination ($_.FullName.Replace('D:\source', 'D:\destination'))