使用powershell我想搜索包含1个名为incoming的文件夹的多个目录中的子文件夹数组,并使用与其源相同的文件夹名称将文件从传入移动到暂存区域。
IE:文件到达如下文件夹:
z:\ folder1 \ incoming \ file。*,z:\ folder2 \ incoming \ file。*,z:\ folder3 \ sub1 \ incoming \ file。*,z:\ folder3 \ sub2 \ incoming \ file。*等。
然后需要使用相同的文件夹结构移动到暂存区域:
\ nas \ staging \ folder1 \ incoming \ file。*,\ nas \ staging \ folder2 \ incoming \ file。*,\ nas \ staging \ folder3 \ sub1 \ incoming \ file。*,\ nas \ staging \ folder3 \ sub2 \ incoming \ file。* etc。
基本上我想从中提取的唯一子文件夹是包含带文件的“Incoming”文件夹的子文件夹。由于除了子文件夹“Incoming”之外没有预定义的文件夹名称,我需要遍历Z中的每个文件夹:。
非常感谢任何帮助或建议。
我能够想出这个,它有效地将文件夹结构除了“传出”移动到登台目录,这是很好的但是在我的环境中会有很多排除检查这种方式。如果需要,我是否有可能将文件从列表中移动到特定文件夹?
$from = 'C:\ftp'
$to = 'C:\staging'
$excludeMatch = @("Outgoing")
Get-ChildItem -Path $from -Recurse -Exclude $exclude |
where { $excludeMatch -eq $null -or $_.FullName.Replace($from, "") -notmatch $excludeMatch } |
Copy-Item -Destination {
if ($_.PSIsContainer) {
Join-Path $to $_.Parent.FullName.Substring($from.length)
} else {
Join-Path $to $_.FullName.Substring($from.length)
}
} -Force -Exclude $exclude
答案 0 :(得分:0)
Sooooo,我们需要的是,识别父目录被称为“传入”的任何文件?我能想到的至少有两种方法可以解决这个问题,但可能会有一个更简洁,更惯用的解决方案让我望而却步。
方法1 - 识别“传入”文件夹,然后复制内容
get-childitem -Path $from -recurse -Filter "incoming" | where-object { $_.PSIsContainer }
如果你使用PowerShell 3,我相信(读'未经测试')这可以缩短为
get-childitem -Path $from -recurse -Filter "incoming" -Directory
上述任何一个都应该产生一个'目录'对象流,所有这些对象都是'传入'文件夹。对于每个文件,将文件复制到适当的目的地。
方法2 - 识别所有文件,然后处理文件夹为“传入”的文件
get-childitem -path $from -recurse | where-object { -not $_.PSIsContainer } | where-object { (Split-Path $_.Directory -Leaf) -eq "incoming" }
这会产生一个'文件'对象流,所有这些对象都在一个名为'incoming'的文件夹中。对于每一个,复制到适当的目的地。