【事象】
あるログファイル内の1年以上前のタイムスタンプが書かれている行を削除するため、以下のようなバッチファイルを作成しました。
- 番号リスト日付が昇順に並んだログファイルを上から1行ずつ読み込み
- 番号リスト1年前のタイムスタンプを見つけたら、その行以降をmoreで同じログファイルににリダイレクトして上書き→結果として1年以上前のタイムスタンプが書かれている行が削除される
set YEAR=%date:~-10,4% set /a LASTYEAR=%YEAR%-1 set TIMESTAMP=%LASTYEAR%/%date:~-5,2%/%date:~-2,2% set DELETELINE=0 set INPUT_FILE=<ログファイル名> setlocal enabledelayedexpansion for /f "delims=" %%a in (%INPUT_FILE%) do ( set line=%%a echo !line! | findstr !TIMESTAMP! >NUL if !errorlevel! == 0 ( rem 一年前のタイムスタンプが存在する行より上の行を削除 more +!DELETELINE! !INPUT_FILE! > !INPUT_FILE! exit 0 ) set /a DELETELINE=DELETELINE+1 )
しかし上記を実行したところ、上書きしたログファイルに何も書き込まれず、空ファイルになってしまいました。
【試したこと】
- "more"の1行のみをコマンドプロンプトで手動実行→成功
- "more"の結果を">"での上書きではなく、">>"で追記→成功。ログの末尾に一年以内のログが追記された
- 読み込んだログファイルと別のログファイルに"more"の結果をリダイレクト→成功
【質問】
- なぜ">"で読み込んだファイルへリダイレクトした場合のみ、空ファイルになってしまうのでしょうか?
- どうすれば意図した通りの結果が得られるのでしょうか?
以上、よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/12 09:34