2014-01-31 47 views
0

我想要一個批處理,檢查並顯示文件是否被更改。批量檢查並顯示特定文件的上次更改時間

如果C:\ temp \ test \ TEST.LOG今天已經改變(當天的檢查),顯示/回顯改變的時間。 \ TEMP \測試\ test.log中已經改變今日(檢查當天),顯示/回聲 「文件所沒有的:

如果不是C:(例如」文件改爲16:55「)今天被改變了

+0

你能發佈最早版本的Windows嗎?我發佈了一個PowerShell建議,但這隻能在Windows 2000及更高版本的內存中使用。 –

回答

1

最簡單的方法是啓動PowerShell,它具有更強大的日期操作功能和文件查詢功能。您可以從一個批處理文件,這樣運行的:

powershell -ExecutionPolicy Bypass -Command "& { if ($(Get-Item c:\temp\test\test.log).LastWriteTime-gt [DateTime]::Today) { Write-Host "File Changed at $(Get-Item c:\temp\test\test.log).LastWriteTime" } else { Write-Host "File not changed" }}" 

這裏是格式化的更漂亮的PowerShell命令,你的理解

if ($(Get-Item c:\temp\test\test.log).LastWriteTime-gt [DateTime]::Today) { 
    Write-Host "File Changed at $(Get-Item c:\temp\test\test.log).LastWriteTime" 
} 
else { 
    Write-Host "File not changed" 
} 
+0

你的代碼工作**但是**似乎只是顯示「文件已更改在...」如果日誌文件已**創建**,而不是**更改/更新**。 test.log不是每天創建的,它更新更多的數據。 – Tomas

+0

對不起 - 應該是'LastWriteTime'而不是'CreationTime'。我誤解了這個問題。 –

0
@ECHO OFF 
SETLOCAL 
SET "targetfile=c:\temp\test\test.log" 
IF NOT EXIST %targetfile% ECHO %targetfile% does NOT exist&GOTO :eof 
FOR %%a IN ("%targetfile%") DO FOR /f "tokens=1*delims= " %%b IN ('ECHO %%~ta') DO IF "%date%"=="%%b" (
ECHO File changed %%c 
) ELSE ECHO File has NOT been changed today 
GOTO :EOF 

這應該工作。根據您的日期/時間設置,您可能需要剔除tokens=delims

只需找到目標的日期/時間,將其分爲%%b中的日期部分和%%c中的時間。將%%b與當前日期進行比較;如果相同,則今天已經更改,所以如果顯示文件的日期爲%%c,否則它今天沒有更改。

相關問題