Move Files Between Document Libraries with Metadata and Version History

Requirement: Move Files Between Document Libraries with Metadata and Version History.

We have a huge document library with more than 100,000 documents, causing search crawl and latency issues. So, I decided to archive old documents into separate document libraries year-wise.

Stop: Before proceeding with any of the below method, Save your source list or library as a template without including content and create a new list from the list template, So that your source and destination libraries will look alike!

Solution 1 – Using Content and Structure page to move files with versions and Metadata:

All SharePoint versions, including MOSS 2007, SharePoint 2010, and SharePoint 2013, supports this functionality.

  • Go to Site settings >> Click on the “Content and structure” link under the Site Administration section
    sharepoint move files with version history
  • Pick the items/files to be moved, Click on Actions >> Move 
  • Select the target list or library and click “OK” to complete the move operation.

This sends files with version history and metadata to the target list.

Solution 2: Move files between document libraries programmatically using PowerShell

Let’s use a PowerShell script to move files between lists: The idea is to create a sub-folder for each Month and move documents into sub-folders based on their creation date.

Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue

#Get the web and List
$Web = Get-SPWeb ""
$SourceList = $web.Lists["Proposals"]
$TargetList = $Web.Lists["Proposal Archive 2009"]

#Get all Files Created in 2009
 $Query = '<Where><And><Geq><FieldRef Name="Created" /><Value IncludeTimeValue="TRUE" Type="DateTime">2009-01-01T00:00:00Z</Value></Geq><Leq><FieldRef Name="Created" /><Value IncludeTimeValue="TRUE" Type="DateTime">2009-12-31T23:59:59Z</Value></Leq></And></Where>'
 $SPQuery = new-object Microsoft.SharePoint.SPQuery
 #$SPQuery.ViewAttributes = "Scope='Recursive'" #To include Sub-folders in the library
 $SPQuery.Query = $Query
 $SourceFilesCollection =$SourceList.GetItems($SPQuery)

Write-host "Total number of files found: "$SourceFilesCollection.count

#Move each file to the destination folder
foreach($item in $SourceFilesCollection)
  #Get the Source File
  $file = $Web.GetFile($item.File.URL)

  #Get the Month value from the File created date
  $MonthValue = $item.File.TimeCreated.ToString('MMMM')
  # Try to Get the Sub-Folder in the Library!
  $TargetFolder = $TargetList.ParentWeb.GetFolder($TargetList.RootFolder.Url + "/" +$MonthValue);
  #If the folder doesn't exist, Create!
  if ($TargetFolder.Exists -eq $false)
     $TargetFolder = $TargetList.Folders.Add([string]::Empty, [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $MonthValue)

   #Move the File
   $file.MoveTo($TargetFolder.Url + "/" + $  
While the Move operation preserves Metadata and version history, Copy doesn’t! Also, the Explore View Drag & Drop from Source Library to destination also preserves versions.

Solution 3: Move files using SharePoint designer

  • Open your site in SharePoint Designer
  • Go to All Files >> Navigate to source library. Select files you want to copy/move, choose cut/copy
    move files using sharepoint designer
  • Go to your target library, Right click and choose “Paste”
Tips: SharePoint general rule of thumb for better performance on large list and libraries: Have < 2000 files per container (list/library/folder).

All of the above methods move documents between libraries of the same site collection! To copy files between document libraries using PowerShell, use: Copy Files Between Document Libraries in SharePoint using PowerShell

Salaudeen Rajack

Salaudeen Rajack - SharePoint Expert with Two decades of SharePoint Experience. Love to Share my knowledge and experience with the SharePoint community, through real-time articles!

5 thoughts on “Move Files Between Document Libraries with Metadata and Version History

  • Do you have a copy of this for SharePoint Online using PNP Powershell?

  • What I need to do is move folders and their contents from one library to another within the same site collection, maintaining as much metadata as possible. Will this do that?

  • How about moving libraries between site collections?

  • Very useful article, thanks!

  • Thanks a lot, this is really a time saver


Leave a Reply

Your email address will not be published. Required fields are marked *