2015-08-18 65 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

相關問題