将一个文件的内容复制到另一个文件,不包括几个文件

时间:2015-08-18 09:54:12

标签: powershell

我在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。怎么做得好?

2 个答案:

答案 0 :(得分: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
}

它获取folder1中的所有文件,检查它们是否也在folder2中,并将每个文件复制到folder3。与单线相同:

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

答案 1 :(得分: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的使用。来自管道的文件将复制到folder3