如何使用PowerShell将新文件从一个文件夹复制到另一个文件夹

时间:2018-04-15 03:09:51

标签: windows powershell copy copy-item

我在完成PowerShell脚本时遇到了一些麻烦。我有一个程序将图像下载到一个临时文件夹,然后在一个小时内它将删除图像文件。偶尔我想保留一些文件,所以我正在创建一个powershell脚本,将图像文件从临时文件夹复制到一个新文件夹,以便我可以对它们进行排序并保留我想要的内容。

  • 这是从下载文件夹到目标文件夹的单向复制。
  • 由于脚本将由Windows任务计划程序每20分钟运行一次,我希望脚本将它在下载文件夹中找到的文件与目标文件夹中的文件进行比较,看看它是否已存在。
  • 如果文件是新的,则复制它,如果它已经在目标文件夹中,则忽略它。
  • 这只是纯粹匹配的文件名,不进行二进制比较。

在网上搜索时,我在TomsITpro上找到了“如何使用PowerShell同步文件夹”的脚本。此脚本在两个文件夹之间双向复制文件。当我尝试修改它只复制一种方式时,我收到了PowerShell错误。

$DownloadFolder = 'D:\TempImages'
$KeepFolder = 'D:\KeepImages'

$DownloadFiles = Get-ChildItem -Path $DownloadFolder
$KeepFiles = Get-ChildItem -Path $KeepFolder

$FileDiffs = Compare-Object -ReferenceObject $DownloadFiles -DifferenceObject $KeepFiles

$FileDiffs | foreach {
    $copyParams = @{
        'Path' = $_.InputObject.Fullname
    }
    if ($_.SideIndicator -eq '=>')
    {
        $copyParams.Destination = $KeepFolder
    }
    Copy-Item @copyParams
}

这个脚本很有效,并且可以很好地进行比较,只会复制新文件(如果它们已经存在)。问题是当我从d:\ script文件夹运行它时,它将所有文件复制到d:\ script文件夹而不是目标文件夹D:\ KeepImages。我在这里做错了什么?

对此PowerShell脚本的任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:1)

尝试添加:Copy-Item -Force -Destination $ KeepFolder

代替 Copy-Item @copyParams

答案 1 :(得分:1)

$DownloadFolder = 'D:\TempImages'
$KeepFolder = 'D:\KeepImages'

$DownloadFiles = Get-ChildItem -Path $DownloadFolder

$KeepFiles = Get-ChildItem -Path $KeepFolder

$FileDiffs = Compare-Object -ReferenceObject $DownloadFiles -DifferenceObject $KeepFiles

$FileDiffs | foreach {
$copyParams = @{
    'Path' = $_.InputObject.Fullname
           }
 $Downloadll = $copyParams.path
if ($_.SideIndicator -eq '=>')
    {
      Copy-Item $Downloadll -Destination $KeepFolder 
    }
}

尝试一下