2015-08-18 63 views
0

我在C:\驱动器中制作了3个文件夹 - new folder1new folder2new folder3new folder1包含五个.txt文件,new folder2包含相同的五个文件加几个。将一个文件的内容复制到另一个文件中,排除几个文件

现在,我想这两个文件夹12比较,并仅从new folder1共同文件复制到new folder3。 (这就像从new folder1new folder2获取常用文件的备份。)

我想排除复制所有不常见的文件。 我写的代码是:

cls 
$folder1 = dir C:\new folder1 
$folder2 = dir C:\new folder2 
$difference = Compare-Object $new folder1 $new folder2 
write-host "`n Missing files are " $difference 
foreach($i in $folder1) 
{ 
copy-item C:\new folder1 -Destination C:\new folder3 -Exclude $difference -Recurse 
} 

但是这个代码复制所有从new folder1文件到new folder3。如何正确地做到这一点?

回答

1

你可以尝试这样的事情:

$folder1 = 'C:\new folder1' 
$folder2 = 'C:\new folder2' 
$folder3 = 'C:\new folder3' 

Get-ChildItem $folder1 | Where-Object { 
    Test-Path (Join-Path $folder2 $_.Name) 
} | ForEach-Object { 
    Copy-Item $_.FullName -Destination $folder3 
} 

它让所有在文件夹1中的文件,检查他们也是在文件夹2,和副本各一个folder3。与单行相同的东西:

gci 'C:\new folder1' | ? { Test-Path (Join-Path 'C:\new folder2' $_.Name) } | % { cp $_.FullName 'C:\new folder3' } 
+0

好的。请试试这个!谢谢你的帮助 !它的赞赏! :) – ruchasn

+0

它的工作! :) :) :)谢谢吨!其作品完美。 – ruchasn

1

您已接近答案。 Compare-object应该工作。 使用它,像这样:

cd C:\folder1 

$folder1 = Get-ChildItem -Path c:\folder1 -Filter *.txt -File -Name 
$folder2 = Get-ChildItem -Path C:\folder2 -Filter *.txt -File -Name 

Compare-Object -ReferenceObject $folder1 -DifferenceObject $folder2 -IncludeEqual -ExcludeDifferent -PassThru | 
Copy-Item -Destination 'C:\temp\folder3' 

$folder1$folder2只包含文本的文件名。 请注意使用-passthrucompare-object。从管道传出的文件被复制到文件夹3

+0

好的..请试试这个!谢谢你的帮助 !它的赞赏! :) – ruchasn

相关问题