2017-06-18 13 views
1

私はいくつかのことを行うWindowsのバッチを持っています。 (かなり長いVMタスク、QEMUとLua)。Windowsバッチ出力用に定義されたstdout出力領域を設定しますか?

バッチのエコー・コールコマンド(stdout)から出力されるすべてのstdoutをWindows Consule表示ウィンドウの定義済みのセクションにパイプして、出力中にウィンドウの上部と下部にグレーのタイトルバーを描画したいスクリプトが何をしているかを表示します。

CMDウィンドウのように自動ラップしてスクロールするような並べ替えは、ウィンドウの定義されたセクションで行います(レトロな例、DOOMワイドローダー、上部と下部に赤いタイトルバーを置く)。初期化中に、ここで私はそれほど迷惑な色の選択をしたい)。

これはバッチファイルかパイプライン可能か、stdoutを送信する実行可能なラッパーのどちらかで合理的に行うことができますか?


EDIT:アップデート1

提案:PowerShellの?

コンソールウィンドウの設定を行うためにPowerShellを埋め込むのは大丈夫ですが、多くの公平な人々がPowerShellの実行許可をRestrictedに設定しています。自動仰角VBScriptとPowerShellのパーミッションアジャスター/自動アンブロッカー/制限付きパーミッションの復元を追加すると、不必要なバルクと迷惑なUACプロンプトがスクリプトに追加されます。

この提案はまた、スマートAVをそのようなスクリプトの多言語拡張機能に対して偽陽性にするリスクを冒しています。

提案:ANSIのエスケープ文字効率的なバッチのための非常に良いトリッキー

、私は言うでしょう。私はタイトルバーを奇妙に表示する逆グレーを認識しています。今、答えは正しい方向に向けられています。出力バッファを調整するANSIエスケープシーケンスはありますか?この提案は、Consule Windowのコードページを調整すると明示的にWindows 10にロックされません。

+0

をよくお読みください==> [私は良い質問をするにはどうすればよい?](http://stackoverflow.com/help/how-to-ask) ==> [最小の作成方法、 (http://stackoverflow.com/help/mcve) == [質問しないでください](http://stackoverflow.com/help/dont-ask) ===> [ここで私はどのような話題を聞くことができますか?](http://stackoverflow.com/help/on-topic) – Hackoo

+0

このようなことは_extremely_バッチで行うのが厄介です。それは技術的に可能ですが、私はそれをすることを強くお勧めします。 – SomethingDark

+0

この特定のスクリプトが長時間実行され、ユーザーにグラフィカルなステータスを表示する必要があると考えて、私はそれを実行することができると考えました。 これはリモートコントロールのVMスクリプトバッチです。私は、特にサイズ変更の準備のために、デフラグや空き領域をゼロにするなどの操作中に、ユーザーに何かを見てもらうようにしたいと思っています。我々は虹の効果を話しているわけではなく、単純な灰色の上/下のバーが広がっていることを発表しています。 –

答えて

1

ansiエスケープシーケンスを持つ小さなサンプル。
画面を2つの別々の領域に分割し、 最初の10行はスクロールせずに固定されます。以下の領域はスクロールします。

@echo off 
call :cls 
call :setWindowSize 50 120 
call :setWindowPos 1040 0 
call :splitWindow 11 
call :gotoxy 1 1 
for /L %%n in (1 1 5) do (
    echo Job: %%n 
) 
call :gotoxy 1 20 
for /L %%n in (1 1 50) do (
    echo Cnt: %%n 
) 
exit /b 

:setWindowSize 
set "lines=%1 
set "columns=%2" 
call :echo-e "\e[8;%lines%;%columns%t"; 

:gotoxy 
set "y=%1" 
set "x=%2" 
call :echo-e "\e[%x%;%y%H" 
exit /b 

:cls 
call :echo-e "\e[2J" 
exit /b 

:setWindowPos 
set "x=%1" 
set "y=%2" 
call :echo-e "\e[3;%x%;%y%t"; 
exit /b 

:splitWindow 
set /a "pos=%1 - 1" 
call :echo-e "\ec\e[2J\e[%1;80r\e[%pos%H\e[46m\e[K\e[0m" 
exit /b 

:windowToFront 
call :echo-e "\e[2t""\e[1t" 
exit /b 

:echo-e 
set "arg1=%~1" 
setlocal EnableDelayedExpansion 
set "arg1=!arg1:\x=0x!" 
set "arg1=!arg1:\e=0x1B!" 
forfiles /p "%~dp0." /m "%~nx0" /c "cmd /c <nul set /p 0x22=!arg1!0x22" 
exit /b 
+0

ありがとうございます!これは私のスクリプトの出力をクリーンアップするために必要なものです。 –