@echo OFF
SETLOCAL
SET "skip="
SET "targetdate=%DATE:~10,4%%DATE:~4,2%%DATE:~7,2%"
SET /a targetdate=20130624
:: Adjust back 1 month then compensate for was-January
SET /a targetdate-=100
IF %targetdate:~-4,2%==00 SET /a targetdate-=8800
FOR /f "tokens=1,2delims=: " %%i IN (
'findstr /n /i "process complete" yourlogfile.txt') DO (
IF "%%j" lss "%targetdate%" SET skip=skip=%%i
IF "%%j" geq "%targetdate%" GOTO trunc
)
:trunc
(
FOR /f "tokens=1*%skip%delims=:" %%i IN ('findstr /n "$" yourlogfile.txt') DO ECHO(%%j
)>newlogfile.txt
ECHO MOVE /y newlogfile.txt yourlogfile.txt
GOTO :eof
在沒有進一步的信息,我認爲在你的日誌文件的唯一線路包含字符串「過程完成」是你提到的那些;還需要保留空行,最重要的是我們可以採用「30天」的橡膠定義。
由於我的日期格式與您的日期格式不同,因此我只是用20130624
覆蓋日期。您需要刪除該行。
從格式爲yyyymmdd的當前日期中,減去100給出同一天上一個月。如果產生的月份是00
那麼當前月份是1月份,所以再減去8800(= 100000 - 1200)
接下來,查找包含日期小於「進程完成」字符串的最後一個日誌行號一個月以前,現在和日期打造skip
節跳過了該行數(這是被移除,因爲這些都是一個多月舊更多)
然後應用計算爲findstr /n
跳過建一個新文件 - 減去不需要的數據。
我已經將MOVE作爲ECHO
,以便前後版本可用。檢查後,刪除ECHO
以用新的替換舊的日誌文件。
如果你想要計算完全是30天,那麼這只是一個與目標日期相差一點的問題。
怎麼樣告訴你的老闆,他/她應該支付[程序員](http://careers.stackoverflow.com/)? – Endoro
請詳細說明:您是否希望從日誌文件中刪除大於30天的日期行?開始時有這個日誌文件其他不同的信息嗎? – Aacini