I was working with one of my customer where was was trying to migrate mailboxes in batch and it was stuck in 95% / completing state.
Symptom: While moving the mailbox in batches to Exchange 2013 you may end up in a situation where MigrationBatch is in completing state and fore completion does not work (Complete-migration batch hangs on completing).
Finalize a migration batch for a local move, cross-forest move, or remote move migration that has successfully finished initial synchronization.
You need to be assigned permissions before you can run this cmdlet. Although all parameters for this cmdlet are listed in this topic, you may not have access to some parameters if they're not included in the permissions assigned to you. To see what permissions you need, see the "Mailbox move and migration permissions" section in the Recipients Permissions topic in Microsoft Technet.
Get-MigrationBatch –identity “BatchName”
Get-MoveRequest | Get-MoveRequestStatistics
Get-ResourcePolicy -Resource mdblatency
Get-ResourcePolicy mdblatency | Set-ResourcePolicy -enabled:$false
Message : Informational: The move request for mailbox
588b1037-0983-4af3-aa35-1dd01b985685 is ready to complete and has been
automatically suspended because the SuspendWhenReadyToComplete parameter is
set to $true.
Complete-MigrationBatch –Identity “BatchName”
(Get-MigrationBatch)[-2..-1] | Remove-MigrationBatch -Force
Note: Is the batch number.  is the first one and [-1] is the last one in the batch list.
Get-MoveRequest -Identity "MailboxName") | Resume-MoveRequest
Get-MoveRequest | Resume-MoveRequest
(Get-MoveRequest -Identity "MailboxName")
After a migration batch for a local or cross-forest move has successfully run and has a status state of Synced, use the Complete-MigrationBatch cmdlet to finalize the migration batch. Finalization is the last phase performed during a local or cross-forest move. When you finalize a migration batch, the cmdlet does the following for each mailbox in the migration batch:
When the finalization process is complete, you can remove the batch by using the Remove-MigrationBatch cmdlet.
If a migration batch has a status of Completed with Errors, you can rerun the Complete-MigrationBatch cmdlet. The cmdlet will attempt to finalize the failed users.