2014-03-18 27 views
-1

使用powershell我想搜索多个目录中包含1个名为incoming的文件夹的子文件夹数组,并将文件从传入文件移动到临时区域使用相同的文件夹名称作为其来源。将子文件夹阵列中的文件移动到具有相同阵列名称的新目录中

IE:文件到文件夹中是这样的:

Z:\文件夹1 \进入\文件*,Z:\文件夹2 \进入\文件*,Z:\ folder3 \ SUB1 \进入\文件。 *,Z:\ folder3 \ SUB2 \来电\文件*等

然后将需要使用相同的文件夹结构被移动到一个临时区域:

\ NAS \分期\ folder1中\来电\文件*,\ nas \ staging \ folder2 \ incoming \ file。*,\ nas \ staging \ folder3 \ sub1 \ incoming \ file。*,\ nas \ staging \ folder3 \ sub2 \ incoming \ file。*等

基本上我想从中提取的唯一子文件夹是包含带有文件的“传入”文件夹的文件夹。由于没有预定义的文件夹名称,除了子文件夹“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

到目前为止您尝试过什么?这是PowerShell的一个相当简单的任务,但这里的人不会为你编写整个脚本。 – alroc

+0

使用Robocopy可能会更好地解决这个问题。 Robocopy可以基于名称匹配模式复制文件并维护目录结构。 – alroc

回答

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" } 

这导致在“文件”的对象,所有这些都是一个称为文件夹中的一个流“传入” 。对于每一个,复制到适当的目的地。

+0

谢谢你生病给我一个尝试。 – Mongony

+0

@Monyony - 为你做了这个工作吗? – andyb

+0

是的,帮了我,谢谢。 – Mongony

相关问题