Windows用にコンパイルした外部exeファイルmsdl.exe(a multi-protocol downloader for various streaming protocols)を呼び出すスクリプトがあります。Write-Progress機能を再作成する
このようなルックスをダウンロードしながらそれは出力です:
download [ MechHand-1.wmv ]
Host: [ 132.68.3.150:554 ] connected!
Host: [ 132.68.3.150:554 ] connected!
Speed: 2.000
DL: 815061/313870475 B -- 0% 150.2K/s # this line updates
私はスクリプトからexeファイルを呼び出すために使用する行は次のとおりです。
cmd /c .\msdl.exe -s2 $address -o $filename '2>&1'
私はへのexeファイルにスクリプトをまとめましたクライアントコンピュータで実行します。 そのようexeファイルとして実行している場合、しかし、進捗ライン自体を上書きしません、代わりにそれは、毎回新しいラインです:私は、私は必要だと思う何
download [ MechHand-1.wmv ]
Host: [ 132.68.3.150:554 ] connected!
Host: [ 132.68.3.150:554 ] connected!
Speed: 2.000
DL: 82992/313870475 B -- 0% 0B/s
DL: 158076/313870475 B -- 0% 158.1K/s
DL: 233160/313870475 B -- 0% 158.1K/s
DL: 301987/313870475 B -- 0% 143.9K/s
DL: 377071/313870475 B -- 0% 143.9K/s
がパイプにMSDLを実行するコマンドの出力です.exeをforeachループに追加し、その内容に基づいて定期的に(download [filename]という行のように)印刷するか、前の行を上書きします。
出力をパイプすると、ファイルサイズに基づいて長い時間がかかる可能性があるので、出力を表示するのではなく、一度にすべての進捗状況を表示しますそれが生成されています。
これは機能しますか、または希望の動作をどのように複製できますか?
PS:stderrにリダイレクトするのはMSDLがstderrに書き込むためです。スクリプトを実行するときには問題ありませんが、exeを実行すると、各行は赤で印刷され、接頭辞は 'ERROR:'になります。
これが望ましい動作をするかどうか試してみるつもりです、ありがとうございます。 バナーに関して - 複数のファイルをダウンロードする場合、ファイルが完成するとバナー行が返される可能性があります。入ってくる回線の内容を「切り替える」方法がありますか(たとえば「DL」で始まります)、それを追加しますか? –
'&'経由の呼び出しでもpowershellで例外が出力され、 'cmd'で呼び出すとよりクリーンな出力が得られました。これは望ましい動作を与えることに近いと思われます、ありがとう。 –