Я принял сценарий PowerShell Copy-WithProgress
, написанный Тревором Салливаном (спасибо!), Но некоторые вычисления, похоже, не работают, когда более 8000 файлов возвращают 3PB, а 5000 файлов возвращают 7Bytes.
Я использую следующие параметры Robocopy для своего «промежуточного журнала»:
$CommonRobocopyParams = '/MIR /S /NP /NDL /NC /BYTES /NJH /NJS /R:1 /W:1'
И использую следующее для чтения журнала для вычисления копируемых байтов:
$BackupLog = 'C:\Users\username\Desktop\Backup_2018-09-20-112849'
$StagingLogPath = '{0}\robocopy staging.log' -f $BackupLog
$StagingContent = Get-Content -Path $StagingLogPath | ? {$_} #Skip blank lines in log
$TotalFileCount = $StagingContent.Count
Write-Host "Number of selected files to be copied: $TotalFileCount."
$RegexBytes = '(?<=\s+)\d+(?=\s+)'
[RegEx]::Matches(($StagingContent -join "`n"), $RegexBytes) | % { $BytesTotal = 0 } { $BytesTotal += $_.Value }
$message = 'Total number of bytes to be copied: {0:N0}' -f ($BytesTotal/1GB)
Write-Host $message
Приведенный выше «Пропуск пустых строк в журнале» предназначен для обработки другого набора журналов из другой папки, т. Е. Документов в том же файле «промежуточного журнала», разделенных пустой строкой.
Скрипт неверно рассчитывает 1 из6 машин, которые я тестировал, и только при резервном копировании рабочего стола на проблемной машине.Я проверил «промежуточный журнал» и сравнил его с правильными расчетными журналами, которые выглядят так:
13162 C:\Users\username\Desktop\File 1.xlsx
1765924 C:\Users\username\Desktop\File 2.xlsx
68838 C:\Users\username\Desktop\File 3.pdf
2380 C:\Users\username\Desktop\File 4.docx
403759 C:\Users\username\Desktop\File 5.txt
10068 C:\Users\username\Desktop\File 6.xlsx
28502 C:\Users\username\Desktop\File 7.jpg
139277 C:\Users\username\Desktop\File 8.docx
553469 C:\Users\username\Desktop\File 9.log
283502 C:\Users\username\Desktop\Book1.xlsx
Мне любопытно, столкнулся ли кто-нибудь с этой проблемой и решил ее.Заранее спасибо!