2013-07-31 55 views
0

我有以下代碼檢查特定字符串的日誌文件,並根據匹配它的日期戳執行某些任務。批處理文件日期格式不正確

現在,下面的代碼在Windows 7計算機上的工作很好,日期時間格式爲:YY-MM-DD hh:mm,但在Windows Server 2008上執行完全相同的批處理文件,日期時間格式爲: YY-MM-DD hh:mm它不起作用 - 我懷疑它可能是日期時間格式... 任何人都可以確認批處理文件中使用的日期時間格式是否適用於YY-DD-MM日期格式?

另外,如果日誌文件中的日期時間格式不同於日誌文件本身的數據時間格式呢?代碼是否仍然有效?

for /f "tokens=2" %%a in ('findstr /i /c:"DATABASE IS OK" log.txt') do set "success=%%a" 
for %%a in (log.txt) do set "filedate=%%~ta" 
if "%filedate:~0,10%"=="%success%" (
    call another.bat 
) else (
    >>otherlogfile.log echo(%date% %time% DATABASE UNSUCCESSFUL 
) 

謝謝


更新1:

C:\Utilities\Filter>for %a in (logfile.txt) do set "filedate=%~ta" 

C:\Utilities\Filter>set "filedate=2013-07-31 21:31" 

C:\Utilities\Filter>REM If it still does not work remove REM from next 
line so we can see what is being compared 

C:\Utilities\Filter>ECHO.filedate=!filedate:~0,10!] success=2013/07/ 
31] 
filedate=2013-07-31] success=2013/07/31] 

C:\Utilities\Filter>pause 
Press any key to continue . . . 

正如你所看到的,beign相比日期將不會匹配,因爲格式不正確。

filedate=2013-07-31] success=2013/07/31] 

你有什麼建議?


更新2:

setlocal enabledelayedexpansion 
for /f "tokens=2" %%a in ('findstr /i /c:"DATABASE IS OK" logfile.txt') do set "success=%%a" 

set "%success:^/=-%" 
echo %success% 
pause 
for %%a in (logfile.txt) do set "filedate=%%~ta" 

REM If it still does not work remove REM from next line so we can see what is being compared 
ECHO.filedate=!filedate:~0,10!] success=%success%] 

pause 
if "!filedate:~0,10!"=="%success%" (
    call another.bat 
) else (
    >>readlogFail.txt echo(%date% %time% DATABASE UNSUCCESSFUL 
) 
+0

每個機器上合適的log.txt樣本都是有用的,就像樣本'%%〜ta'一樣。你已經說明了YY-MM-DD格式,但是在你的敘述中,沒有明顯的原因轉換爲YY-DD-MM。如果日誌文件中的最後一個'DATABASE IS OK'行發生在午夜之前,但是日誌文件在午夜之後更新並因此具有不同的日期,是否可能會出現問題? – Magoo

回答

2

我注意到的第一件事是,如果你想查詢的FILEDATE的運行時間值FOR循環,你需要SETLOCAL ENABLEDELAYEDEXPANSION,然後使用!代替 %。很可能它恰好在Windows 7上運行,因爲成功和文件的加載時間值是相同的。嘗試下面的代碼。你可能會發現還有其他的東西是錯誤的,但我們先來做。請注意,成功不會在FOR/IF構造中被詢問,但是提交者是。

setlocal enabledelayedexpansion 
for /f "tokens=2" %%a in ('findstr /i /c:"DATABASE IS OK" log.txt') do set "success=%%a" 
set success=%success:/=-% 
for %%a in (log.txt) do set "filedate=%%~ta" 
REM If it still does not work remove REM from next line so we can see what is being compared 
ECHO.filedate=!filedate:~0,10!] success=%success%] 
if "!filedate:~0,10!"=="%success%" (
    call another.bat 
) else (
    >>otherlogfile.log echo(%date% %time% DATABASE UNSUCCESSFUL 
) 
+0

感謝您的回答。不確定如何實際執行此操作?我沒有自己寫腳本 – DextrousDave

+0

我編輯了我上面的答案。 – RGuggisberg

+0

非常感謝RGuggisberg,非常感謝你的回答。它適用於我的Win7 PC,尚未在服務器上進行測試,因爲服務器在我的工作中,所以我會在明天進行測試。正如我所說的,在我的服務器上,windows的日期時間格式以及日誌文件是YYYY-MM-DD,文件中的日期條目是YYY/MM/DD。這會成爲一個問題嗎?否則,我們總是可以運行一個命令,首先將文本文件中的所有日期條目更改爲與服務器相同的時間格式,即:YYY-MM-DD – DextrousDave