2012-11-20 54 views
0

我有一个脚本,用于调用目录中每个文件的外部程序(SoX)。在每次调用SoX之前,我打电话给Write-Progress,但进度条被SoX的输出(无论控制台的大小)从控制台缓冲区的顶部推出。有什么我可以做,以避免这种情况?控制台缓冲区以外的写入进度显示

这里的脚本:

$audioFiles = ls -Exclude *.ps1 | ? { !$_.PSIsContainer } 
foreach ($audioFile in $audioFiles) 
{ 
    $i++ 
    Write-Progress -Activity "Transforming Audio" -Status $audioFile.Name -PercentComplete (($i/@($audioFiles).length) * 100) 
    & 'C:\Program Files (x86)\sox-14-4-0\sox.exe' "$audioFile" ('Fast/' + $audioFile.Name) -S -G tempo -s 1.3 
} 

Write-Progress -Activity "Transforming Audio" -PercentComplete 100 -Completed 

[void] [Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”) 
[windows.forms.messagebox]::show(“All done!”) 

回答

0

也许你可以设置输出SOX同前控制台光标位置? 请尝试

$audioFiles = ls -Exclude *.ps1 | ? { !$_.PSIsContainer } 
foreach ($audioFile in $audioFiles){ 
    $i++ 
    Write-Progress -Activity "Transforming Audio" -Status $audioFile.Name -PercentComplete (($i/@($audioFiles).length) * 100) 

    # get windows height 
    $y=[int]($host.ui.rawui.WindowSize.Height -5) 
    # will set cursor position to bottom of the screen 
    $Host.UI.RawUI.CursorPosition = New-Object System.Management.Automation.Host.Coordinates 2,$y 
    #clear current line 
    $sbOut = new-object System.Text.Stringbuilder 
    (0.. $Host.UI.RawUI.WindowSize.Width)|%{$sbOut.append(' ')} |out-Null 
    write-Host $sbOut.toString() -NoNewline 

    & 'C:\Program Files (x86)\sox-14-4-0\sox.exe' "$audioFile" ('Fast/' + $audioFile.Name) -S -G tempo -s 1.3 
    } 
Write-Progress -Activity "Transforming Audio" -PercentComplete 100 -Completed 
[void] [Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”) 
[windows.forms.messagebox]::show(“All done!”) 

你也可以SOX输出重定向到一个文件或者如果你不约SOX护理输出只是将其重定向到了空:

& 'C:\Program Files (x86)\sox-14-4-0\sox.exe' "$audioFile" ('Fast/' + $audioFile.Name) -S -G tempo -s 1.3 | out-null 
+0

它仍然是推离的顶部安慰。我曾想过把输出重定向到一个文件,但是SoX显示了每个文件的进度,所以它正在执行我想要的每个文件进度,而'Write-Progress'则提供了整体进度。 – bdukes

+0

抱歉,我不了解您的需求,您是否关心sox的输出?你有样品吗? –

+0

是的,我确实希望看到SoX输出(它是动态更新进度信息)。输出看起来像https://gist.github.com/4118739 – bdukes

相关问题