2013-12-14 34 views
0

我有一個log.txt文件,其中包含DATE發生,如最近1年數據的以下格式。在日誌文件中搜索OLDEST日期

25/11/2013 

我們如何回顯log.txt文件中最早的日期?

我在谷歌和堆棧下面的搜索只以文件結束,沒有得到任何關於內部文件的內容。

@echo off 
for /f %%i in ('dir /b/a-d/o-d/t:c') do set OLD=%%i 
echo The most oldest file is %OLD% 

日誌片段:

SERVERNAME 
-------------------------------------------------------------------------------- 
APPNAME   TO_CHAR((TO_DATE('0 TO_CHAR((TO_DATE('0 
-------------------- ------------------- ------------------- 
STRDESCRIPTION 
-------------------------------------------------------------------------------- 
SUSERNAME 
-------------------------------------------------------------------------------- 
Windows64 
Metadata   25/11/2013 14:14:41 25/11/2013 14:25:29 

[email protected] 

log snap

+0

你要一行或作爲結果的條目記錄?結果你想要什麼? – foxidrive

+0

@foxidrive ...結果只需要一行:回顯最早的日期。 – Sunny

+0

現在還不清楚。將日期的一部分寫入日誌文件比較複雜,例如?如果要檢查的日期在同一行,如果你的行上的兩個日期總是相同的,我們現在就不要這樣做,我們可以只檢查第一個.....給出一個代表你的問題的代碼片段。 – SachaDee

回答

2

一種解決方案:

編輯:

@echo off&cls 
setlocal enabledelayedexpansion 

for /f "delims=" %%a in ('type sacha.txt ^| findstr /i "./"') do (
    for %%b in (%%a) do (set $test=%%b 
         if "!$test:~2,1!"=="/" (set $date=%%b 
           set #!$date:~6,4!!$date:~3,2!!$date:~0,2!=%%b))) 

for /f "tokens=2 delims==" %%a in ('set #') do (echo The Oldest Date Is : %%a 
               exit /b) 
endlocal 

顯然你的日期總是包含日期的行的第三個單詞。如果這種情況下你可以在下面使用這個代碼,如果你現在不使用上面的代碼,那麼誰來測試這個代碼行中的第三個字符是否是「/」,如果是的話就把它設置爲日期。但兩者都可以在你提供的片段中使用。第一個給你更多的安全性。但我認爲第二個是OK和更快:

@echo off&cls 
setlocal enabledelayedexpansion 

for /f "delims=" %%a in ('type sacha.txt ^| findstr /i "./"') do (
    for /f "tokens=3 delims= " %%b in ('echo %%a') do set #!$date:~6,4!!$date:~3,2!!$date:~0,2!=%%b) 

for /f "tokens=2 delims==" %%a in ('set #') do (echo The Oldest Date Is : %%a 
               exit /b) 
endlocal 
+0

@ Sachadee ..我把上面的日誌片段[有虛線(----)'],它不工作。 – Sunny

+0

@Sachadee ...是啊..現在它的工作就像一個魅力..謝謝..! :) – Sunny

1

你不需要delayed expansion這裏:

@ECHO OFF &SETLOCAL 
FOR /F "tokens=1-3delims=/" %%a IN (log.txt) DO set "$%%c%%b%%a=%%a/%%b/%%c" 
FOR /F "tokens=2delims==" %%A IN ('set $') DO if not defined OldestDate set "OldestDate=%%A" 
ECHO(The most oldest file is %OldestDate% 
+0

@Endoro ..我不知道爲什麼,但它沒有給出結果。我把上面的日誌片段作爲參考[在日誌中有**虛線(----)**]。 – Sunny

+0

@ Endoro ..作爲你的簡化批處理方法的粉絲..我仍然非常想知道它會給出正確的結果嗎? :) – Sunny

+0

@Sunny你上傳了一個日誌文件到RS,我看着它。只需用我的第一個'for'循環的第一部分替換爲foxidrive:'for/f「tokens = 2,3,4 delims = /」%% a('find「/」^ <「log.txt 「')做'。 – Endoro

1

看到這種雲,陽光明媚:

@echo off 
del tmp.tmp 2>nul 
for /f "tokens=2,3,4 delims=/ " %%a in (' find "/" ^< "log.txt" ') do >>tmp.tmp echo %%c/%%b/%%a 
for /f "delims=" %%a in ('sort /r ^<tmp.tmp ') do set lastdate=%%a 
echo "%lastdate%" 
pause 
del tmp.tmp 2>nul 
+0

@ Foxi ..現在我們接近結果了..它給出了最新的日期。 – Sunny

+0

我在測試時感到困惑。現在就試試。 – foxidrive

+0

是啊......現在它的工作非常出色.. !! :) – Sunny