2013-06-24 32 views
1

我今天早上在谷歌上花費了大量精力,並且空手而歸已經來到這裏尋找我的答案。而且你們總是提供令人敬畏的感覺。將ECHO附加到文本文件並限制爲30天

在批處理文件的末尾,我想將一個日期/時間附加到文本文件中。這將作爲一個簡單的歷史記錄文件。這部分很容易。

代碼:

ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete >> C:\Installs\~AcctRefreshLog.txt 

輸出:

20130624 11:51:32.45 Process Complete 

現在,我想這限制了歷史的30天。這就是我找到你找到的。我曾想過在一個文件夾中用文件名中的日期/時間創建單個文件,並插入命令來刪除超過30天的任何文件,但是老闆想要一個小腳本,一個文件來使用。

任何想法或想法?

+0

怎麼樣告訴你的老闆,他/她應該支付[程序員](http://careers.stackoverflow.com/)? – Endoro

+0

請詳細說明:您是否希望從日誌文件中刪除大於30天的日期行?開始時有這個日誌文件其他不同的信息嗎? – Aacini

回答

1
for /f %%C in ('find /c /v "" ^<C:\Installs\~AcctRefreshLog.txt') do set count=%%C 
if %count% LSS 30 (
    ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete >> C:\Installs\~AcctRefreshLog.txt 
) 

編輯:

for /f %%C in ('findstr /r /n "[0-9][0-9]**.**[0-9]*:[0-9]*:[0-9]*\.[0-9]*.*Process Complete " ^<C:\Installs\~AcctRefreshLog.txt ^| find /c "Process Complete"') do set /a count=%%C+1 
    if %count% LSS 30 (
     ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete >> C:\Installs\~AcctRefreshLog.txt 
    ) else (
    ECHO %DATE:~10,4%%DATE:~4,2%%DATE:~7,2% %TIME% Process Complete > C:\Installs\~AcctRefreshLog.tx 

) 
+1

+1,不錯的想法:)但我認爲OP需要另一種解決方案..... – Endoro

+0

Aaah.He可能會在那裏打印其他東西。我應該計算'XX:XX:XX.XX過程完成'。將修復此問題 – npocmaka

0
@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天,那麼這只是一個與目標日期相差一點的問題。