所以我发现xcopy对于复制整个文件夹结构非常有帮助。但我还需要将特定文件夹的内容复制到新目录中。
例如:
1. C:\OriginalDir
- \This
* \Test
- \That
* \Test
- \Other
我可以使用xcopy C:\OriginalDir C:\TempDir /e /t
来复制C:\OriginalDir
的整个结构。但是,我还需要将两个\Test
文件夹的内容复制到新目录中。我对xcopy很新,我也研究过robocopy。有没有办法做到这一点?我试图在PowerShell中完成此任务,并考虑迭代文件夹结构,但是当我最终到达Test文件夹时,它仍然没有存储父文件夹结构。
感谢。
答案 0 :(得分:2)
您是否尝试过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开关
答案 1 :(得分:1)
感谢史蒂夫让我开始让我正确地思考这个问题。在没有使用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
}
}
}
}