これが単純なハイブリッドバッチ/JScriptスクリプトで、あなたが望むことを実行できると思います。
show3.bat
@if (@X)==(@Y) @end /* harmless hybrid line that begins a JScrpt comment
::: Batch part ::::
@cscript //nologo //e:JScript "%~f0"
@exit /b
*** JScript part ***/
while( !WScript.StdIn.AtEndOfStream ) {
WScript.StdOut.Write( '\x08\x08\x08' + WScript.StdIn.ReadLine().substr(0,3) );
}
WScript.StdOut.WriteLine();
使用法:
yourCommand | show3
スクリプトは純粋なJScriptに簡略化できますが、その場合、使用するのはそれほど便利ではありません。
show3.js
while( !WScript.StdIn.AtEndOfStream ) {
WScript.StdOut.Write( '\x08\x08\x08' + WScript.StdIn.ReadLine().substr(0,3) );
}
WScript.StdOut.WriteLine();
使用法:
yourCommand | cscript //nologo show3.js
編集jebがコメントしたように、このソリューションを使用するために再作成する必要はありません。
jebの回答にあるいくつかの概念を取り上げ、プロセス全体を1つのハイブリッドスクリプトにまとめました。スタンドアロンの「show3」ファイルは必要ありません。
@if (@X)==(@Y) @end /* harmless hybrid line that begins a JScrpt comment
:: ***** Batch part ******
@echo off
REM whatever batch code you need goes here
yourCommand | cscript //nologo //e:JScript "%~f0"
REM whatever batch code you need goes here
exit /b
****** JScript part ******/
while( !WScript.StdIn.AtEndOfStream ) {
WScript.StdOut.Write( '\x08\x08\x08' + WScript.StdIn.ReadLine().substr(0,3) );
}
WScript.StdOut.WriteLine();
yourCommand
使用している圧縮コマンドは何でもかまいません。コメントに基づくと、必要なyourCommand 2>&1
出力がstdoutではなくstderrに出力される場合は、使用する必要があるようです。
テスト用に「yourCommand.bat」ファイルを作成しました。これは、圧縮プログラムについて説明した出力動作を大まかにエミュレートします。
@echo off
for /l %%A in (1 1 100) do (
echo %%A "I don't want to see this quoted text"
for /l %%B in (1 1 50000) do rem
)
最後に、本当に純粋なバッチソリューションが必要な場合は、jebのソリューションを大幅に簡略化しました。一時ファイルを削除し、代わりにパイプを使用しました。
@echo off
if "%~1"==":show3" goto :show3
REM whatever batch code you need goes here
(yourCommand & echo EOF) | "%~f0" :show3
REM whatever batch code you need goes here
exit /b
:show3
setlocal enableDelayedExpansion
for /f %%a in ('copy /Z "%~dpf0" nul') do set "CR=%%a"
:read
set "ln="
set /p "ln="
if not defined ln goto :read
for /f "tokens=1* delims= " %%A in ("!ln!") do if "%%A%%B" equ "EOF" (
echo(
exit /b
)
<nul set /p "=!ln:~0,3! !cr!"
goto :read
編集-先頭または末尾のスペースを無視するようにEOFテストを変更しました。これにより、コードがより堅牢になります。