2016-07-07 8 views
1

ich zur Zeit eine Arbeits Robo Copy-Funktion hat, die den Prozentsatz der aktuellen Datei Spuren übertragen werden. Ich habe versucht, es zu bekommen, um die Anzahl der übertragenen Dateien aus der Gesamtzahl zu verfolgen, zum Beispiel 10/50 Dateien, die übertragen wurden. Ich habe versucht, Trevor Sullivan für den Fortschritt, aber es funktioniert nicht mit meinem Skript. HierPowershell Robo Copy File Transfer Fortschritt

ist ein Segment:

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"  
} 
} 
} 

Es verfolgt, was übertragen wird, und der Fortschritt der einzelnen Dateien, aber nicht total Dateien. Jede Hilfe wäre willkommen. Vielen Dank.

Antwort

1

nicht getestet, aber etwas in diese Richtung arbeiten kann

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

Ich habe versucht, in die Funktion zu arbeiten, aber es hielt den Fehler zurückkehrt oder die Dateien nicht richtig berechnet wird. Irgendwelche anderen Ideen? –

+0

versuchen, die '$ Ersetzen von Dateien =' mit diesem: '$ files = dir $ source -recurse -file' –

+0

Ich denke, dass festgelegt, dass alle Ideen auf, die„Can not Parameter 'Aktivität' binden, weil es null ist –

Verwandte Themen