2016-07-07 1 views
1

현재 전송중인 현재 파일의 비율을 추적하는 작동하는 Robo Copy 기능이 있습니다. 나는 파일의 수를 추적하려고 노력했다. 예를 들어, 10/50 파일이 전송되었다. Trevor Sullivan의 진행 방법을 시도했지만 스크립트로는 작동하지 않습니다.PowerShell Robo 파일 전송 진행 복사

Function global:music_Transfer{ 

if($WPFmusic_checkBox.IsChecked -eq $true){ 

$quotation = ":" 
$source = "$DLetter$quotation\Users\$associd\Music" 
$destination = "C:\Users\$env:USERNAME\Music" 
$copy = "/COPY:DTO" 
$files = "*.*" 
$backup = "/B" 
$reportextrafiles = "/X" 
$verboseoutput = "V" 
$fullpathname = "FP" 
$mirror = "/MIR" 
$backupmode = "/ZB" 
$subfolders = "/E" 
$Retries = "/R:2" 
$consolewrite = "/TEE" 

robocopy.exe $source $destination $files $backup $reportextrafiles $verboseoutput $fullpathname $mirror $backupmode $subfolders $Retries $consolewrite | ForEach-Object -Process { 
    $data = $_.Split([char]9); 
    if (($data.Count -gt 4) -and ("$($data[4])" -ne "")) 
    { 
     $file = "$($data[4])" 
     Write-Progress "Percentage $($data[0])" -Activity "Music" -CurrentOperation "$($file)" -ErrorAction SilentlyContinue; 
    } 
    else 
    { 
     Write-Progress "Percentage $($data[0])" -Activity "Music" -CurrentOperation "$($file)" 
    } 
} 
# Robocopy has a bitmask set of exit codes, so only complain about failures: 
[int] $exitCode = $global:LastExitCode; 
[int] $someCopyErrors = $exitCode -band 8; 
[int] $seriousError = $exitCode -band 16; 
if (($someCopyErrors -ne 0) -or ($seriousError -ne 0)) 
{ 
    Write-Error "ERROR: robocopy failed with a non-successful exit code: $exitCode"  
} 
} 
} 

그것은 전송되는 것을 추적하고 개별 파일의 진행 상황,하지만 총 파일 : 여기

는 세그먼트입니다. 어떤 도움을 주시면 감사하겠습니다. 감사.

답변

1

테스트하지만,이 라인을 따라 뭔가 내가의 기능을 작동하려고

Function global:music_Transfer{ 

if($WPFmusic_checkBox.IsChecked -eq $true){ 

$quotation = ":" 
$source = "$DLetter$quotation\Users\$associd\Music" 
$destination = "C:\Users\$env:USERNAME\Music" 
$copy = "/COPY:DTO" 
$files = "*.*" 
$backup = "/B" 
$reportextrafiles = "/X" 
$verboseoutput = "V" 
$fullpathname = "FP" 
$mirror = "/MIR" 
$backupmode = "/ZB" 
$subfolders = "/E" 
$Retries = "/R:2" 
$consolewrite = "/TEE" 

$files = [array][System.IO.Directory]::EnumerateFiles($source, '*.*', 'AllDirectories') 
$index = 0 
$total = $files.Count 
$starttime = $lasttime = Get-Date 

robocopy.exe $source $destination $files $backup $reportextrafiles $verboseoutput $fullpathname $mirror $backupmode $subfolders $Retries $consolewrite | ForEach-Object -Process { 
    $index++ 
    $currtime = (Get-Date) - $starttime 
    $avg = $currtime.TotalSeconds/$index 
    $last = ((Get-Date) - $lasttime).TotalSeconds 
    $left = $total - $index 
    $WrPrgParam = @{ 
     Activity = (
      "music_Transfer $(Get-Date -f s)", 
      "Total: $($currtime -replace '\..*')", 
      "Avg: $('{0:N2}' -f $avg)", 
      "Last: $('{0:N2}' -f $last)", 
      "ETA: $('{0:N2}' -f ($avg * $left/60))", 
      "min ($([string](Get-Date).AddSeconds($avg*$left) -replace '^.* '))" 
     ) -join ' ' 
     Status = "$index of $total ($left left) [$('{0:N2}' -f ($index/$total * 100))%]" 
     #CurrentOperation = "FILE: $file" 
     PercentComplete = $index/$total * 100 
     Id = 1 
    } 
    Write-Progress @WrPrgParam 
    $lasttime = Get-Date 

    $data = $_.Split([char]9); 
    if (($data.Count -gt 4) -and ("$($data[4])" -ne "")) 
    { 
     $file = "$($data[4])" 
     Write-Progress "Percentage $($data[0])" -Activity "Music" -CurrentOperation "$($file)" -ErrorAction SilentlyContinue; 
    } 
    else 
    { 
     Write-Progress "Percentage $($data[0])" -Activity "Music" -CurrentOperation "$($file)" 
    } 
} 
# Robocopy has a bitmask set of exit codes, so only complain about failures: 
[int] $exitCode = $global:LastExitCode; 
[int] $someCopyErrors = $exitCode -band 8; 
[int] $seriousError = $exitCode -band 16; 
if (($someCopyErrors -ne 0) -or ($seriousError -ne 0)) 
{ 
    Write-Error "ERROR: robocopy failed with a non-successful exit code: $exitCode"  
} 
} 
} 
+0

작동 할 수 있지만 그것은 오류를 반환 또는 오른쪽으로 파일을 계산하지 유지되지. 다른 아이디어? –

+0

'$ files ='를 다음과 같이 바꾸어보십시오 :'$ files = dir $ source -recurse -file' –

+0

그게 고정되어있는 것 같아요. "null이 아니기 때문에 매개 변수 'Activity'를 바인드 할 수 없습니까? –