質問: 0 ( rem 一年前のタイムスタンプが存在する行より上の行を削除 more +!DELETELINE! !INPUT_FILE! > !INPUT_FILE! exit 0 ) set /a DELETELINE=DELETELINE+1 ) ``` しかし上記を実行したところ、上書きしたログファイルに何も書き込まれず、空ファイルになってしまいました。 【試したこと】 * "more"の1行のみをコマンドプロンプトで手動実行→成功 * "more"の結果を">"での上書きではなく、">>"で追記→成功。ログの末尾に一年以内のログが追記された * 読み込んだログファイルと別のログファイルに"more"の結果をリダイレクト→成功 【質問】 * なぜ">"で読み込んだファイルへリダイレクトした場合のみ、空ファイルになってしまうのでしょうか? * どうすれば意図した通りの結果が得られるのでしょうか? 以上、よろしくお願いいたします。
回答: > > なぜ">"で読み込んだファイルへリダイレクトした場合のみ、空ファイルになってしまうのでしょうか? > > > リダイレクトで書き出すためにシェルが新規作成としてファイルを開き**内容がクリアされます**ので、その後に`more`コマンドがファイルを見たときには、もう内容はありません。 > > どうすれば意図した通りの結果が得られるのでしょうか? > > > いったん別なファイルに結果を書き出してから、結果ファイルで上書きする、というような処理が必要かと思います。