我具有如下所示的源文件夹结构
c:\TestResults |-- Log | |-- xyz.pdf | `-- Reports | `-- rp.pdf |-- Keywords | |-- key.txt | | `-- pb.ea | `-- reports |-- Test | |-- 11.pdf | |-- 12 | `-- Log | |-- h1.pdf | `-- Reports | `-- h2.pdf `-- Dev |-- st |-- ea `-- Log `-- Reports `-- h4.pdf
我需要在保留文件夹结构的同时复制所有“ Log”文件夹。目标路径是“ c:\ Work \ Logs \ TestResults”。生成的结构应如下所示。
c:\Work\Logs\TestResults |-- Log | |-- xyz.pdf | `-- Reports | `-- rp.pdf |-- Test | `-- Log | |-- h1.pdf | `-- Reports | `-- h2.pdf `-- Dev `-- Log `-- Reports `-- h4.pdf
是否有使用Powershell脚本实现此目标的简单方法?谢谢!
编辑:这是我到目前为止编写的代码。它使文件夹结构变平,但不维护层次结构。我是Powershell脚本的新手。请帮忙。
$baseDir = "c:\TestResults"
$outputDir = "c:\Work\Logs"
$outputLogsDir = $outputDir + "\TestResults"
$nameToFind = "Log"
$paths = Get-ChildItem $baseDir -Recurse | Where-Object { $_.PSIsContainer -and $_.Name.EndsWith($nameToFind)}
if(!(test-path $outputLogsDir))
{
New-Item -ItemType Directory -Force -Path $outputLogsDir
}
foreach($path in $paths)
{
$sourcePath = $path.FullName + "\*"
Get-ChildItem -Path $sourcePath | Copy-Item -Destination $outputLogsDir -Recurse -Container
}
答案 0 :(得分:1)
您所追求的如下。它将复制项目和目录(如果其中任何部分包含“ \ log”)。
$gci = Get-ChildItem -Path "C:\TestResults" -Recurse
Foreach($item in $gci){
If($item.FullName -like "*\log*"){
Copy-Item -Path $item.FullName -Destination $($item.FullName.Replace("C:\TestResults","C:\Work\Logs\TestResults")) -Force
}
}