0

サブフォルダーを含むフォルダーのコピーを作成する必要がありますが、フォルダー「プロジェクト」を含むデータを除いて、ファイルなしで行います。

したがって、新しいフォルダー ツリーを作成する必要がありますが、「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

4 に答える 4

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
于 2012-06-14T05:31:41.850 に答える
0

Get-ChildItemフォルダーを再帰的に使用し、 を使用して構造を再マップしますNew-Item。再帰内では、「プロジェクト」を簡単に確認できます。

于 2012-06-14T05:07:13.620 に答える
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 }
于 2012-06-14T06:50:59.930 に答える
0

まず、ディレクトリ構造を作成します。

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

次に、ソース ディレクトリを反復処理し、プロジェクト ディレクトリ内のすべてのファイルをコピーします。

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'))
于 2012-06-15T13:59:01.050 に答える