首页 > 解决方案 > 如何将多个文件通过管道传输到 Copy-Item 并保持目录结构?

问题描述

我有一个非常大的目录D:\Stuff,我想在 上创建它的副本D:\CopyStuff,但我只想获取具有特定扩展名的文件并保留文件夹结构。

获取我想要的文件似乎很简单:

$from = "D:\stuff"
$to = "D:\CopyStuff"   
$files = Get-ChildItem -Recurse -Path $from -Include *.config, *.txt, *.ini 

但是,复制文件并保持结构更具挑战性。我可以使用 for 循环,但这似乎与 Powershell 的本质背道而驰。这里https://stackoverflow.com/a/25780745/782880,它建议这样做:

Get-ChildItem -Path $sourceDir | Copy-Item -Destination $targetDir -Recurse -Container

但这将文件复制到D:\CopyStuff没有文件夹,更不用说我的原始结构了。我究竟做错了什么?我正在使用 Powershell 5。

标签: powershell

解决方案


尝试这个 :

$Source="C:\temp\test1"
$Dest="C:\temp\test2"
$EnableExt=".config", ".txt" , ".ini"

Get-ChildItem $Source -Recurse | % {

    $NewPath=$_.FullName.Replace($Source, $Dest)

    if ($_.psiscontainer)
    {
        New-Item -Path $NewPath -ItemType Directory -Force
    }
    elseif ($_.Extension -in $EnableExt)
    {
        Copy-Item $_.FullName $NewPath -Force
    }
}

推荐阅读