powershell - 如何将多个文件通过管道传输到 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。
解决方案
尝试这个 :
$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
}
}