Powershell导入带有文件夹/子文件夹树的CSV文件并复制到新目录,而无需重复

时间:2018-08-01 00:03:34

标签: powershell robocopy

所以我有一个csv,例如:

Source
C:\Users\barcalac\Desktop\SOURCE\Finance
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files\Misc
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files\Misc\Doc1.docx
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files\Misc\Doc2.docx
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files\Misc\Doc3.docx
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files\Misc\Doc4.docx
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files\Misc\Doc5.docx

当尝试使用任何复制命令进行复制时,它当然是逐行进行并将每个路径/文件复制到新目录。我的问题是如何使其足够聪明,仅复制顶层文件夹,并跳过该顶层文件夹下方各行中的文件夹/文件。

上面的示例应该重新创建

c:\users\barcalac\desktop\source\finance

d:\users\barcalac\desktop\target\finance

没有将所有行一一复制,从而创建了Finance文件夹中已有内容的副本。

1 个答案:

答案 0 :(得分:0)

假定您要递归复制每个路径。 我敢肯定,可以用一种更聪明的方式来做到这一点,但这应该可行。
要删除文档中任何其他路径中包含的路径,我将执行以下操作

    $a=@"
C:\Users\barcalac\Desktop\SOURCE\Finance
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files\Misc
C:\Users\barcalac\Desktop\SOURCE\Finance\BMc's Files\2001 Files\Misc\Doc1.docx
C:\users\fayo\1
c:\users\fayo\2
c:\users\fayo\2\doc.doc
"@|ConvertFrom-csv -Header path

foreach ($i in (0..($a.count-1))) 
{
    foreach ($j in (0..($a.count-1))) {
            if ($a[$j].path -like  "$($a[$i].path)*")
                 {$a[$j]=$a[$i]}  
            }
}

$a|select -Unique -Property path 

以上结果为

path                                    
----                                    
C:\Users\barcalac\Desktop\SOURCE\Finance
C:\users\fayo\1                         
c:\users\fayo\2