2011-12-05 4 views
4

コマンドプロンプトで実行中に出力をテキストファイルに保存する一般的な構文が分かります。コマンドプロンプトから出力を保存する方法

しかし、私のニーズは異なります。コマンドプロンプトウィンドウでも見たいのですが、テキストファイルに保存します。 > c:\ dirlist.txtを使用するとテキストファイルに保存されますが、コマンドプロンプトウィンドウには表示されません。

私はコマンドプロンプトにもテキストファイルにも保存する必要があります。任意のヘルプ

+0

からです。 – Jon

答えて

1

Windows用のteeプログラムに相当するものが必要です。 PowerShellを使用できる場合は、you already have what you needを使用してください。それ以外の場合は、システム上で動作する実装についてはgoogleを参照してください。

出力をファイルにリダイレクトし、別のコマンドプロンプト(つまり、tailに相当)からライブログビューアでそのファイルを確認することもできます。

2

まず、TEE.BATプログラムを書くのは比較的簡単です。唯一の問題は、コマンドの出力を取得するコマンドであるset /pコマンドが、ファイルの終わりと空行を区別しないことです。しかし

tee CopyOfFile.txt < File.txt 

@echo off 
:: usage: AnyCommand | TEE filename 
setlocal EnableDelayedExpansion 
if exist %1 del %1 
:nextLine 
set line=:EOF 
set /p line= 
if "!line!" == ":EOF" goto :eof 
echo(!line! 
echo(!line!>> %1 
goto nextLine 

あなたは、このバッチファイルが実際にこのように動作することをテストすることがあります。これは、出力が最初の空行(またはファイルの終わり)まで捕獲されることを意味しこのバッチファイルは、それが設計された方法で使用された場合、それが今して失敗します。

type File.txt | tee CopyOfFile.txt 

前のラインは時々OK働き、時には示し、店ファイルの最初の行だけです。いくつかのテストを行いましたが、エラーの原因を特定できません。おそらく誰か(jeb?)がこの場合に何が起こっているのかを説明し、解決策を提示する可能性があります。

+0

[How Set/pのしくみ](http://www.dostips.com/forum/viewtopic.php?p=9781#p9781)で調べます。 set/pはパイプからのデータを待たず、/ pは ''のみでデータを読み取ることはできませんがパイプは '' – jeb

+0

を削除します。最後の文はナンセンスです。パイプバッファは 'CR/LF'の組を含み、' set/p'は常に完全な(パイプ)バッファを読み込みますが、最初の 'CR/LF'の後にすべてを取り除きます。 – jeb

0

あなたはAaciniのようなバッチで自分のティーを書くことができますが、欠点はありません。

@ECHO OFF 
setlocal DisableDelayedExpansion 
for /F "delims=" %%A in ('findstr /n "^" ') do (
    set "line=%%A" 
    setlocal EnableDelayedExpansion 
    set "line=!line:*:=!" 
    (echo(!line!) 
    (echo(!line!) > "%~1" 
    endlocal 
) 

最初にアイデアがwalid2meそれはそのサイトのためのより適切なので、スーパーユーザに質問を転送するために投票echo to screen and file in a single line

関連する問題