我想要一個批處理,檢查並顯示文件是否被更改。批量檢查並顯示特定文件的上次更改時間
如果C:\ temp \ test \ TEST.LOG今天已經改變(當天的檢查),顯示/回顯改變的時間。 \ TEMP \測試\ test.log中已經改變今日(檢查當天),顯示/回聲 「文件所沒有的:
如果不是C:(例如」文件改爲16:55「)今天被改變了「
我想要一個批處理,檢查並顯示文件是否被更改。批量檢查並顯示特定文件的上次更改時間
如果C:\ temp \ test \ TEST.LOG今天已經改變(當天的檢查),顯示/回顯改變的時間。 \ TEMP \測試\ test.log中已經改變今日(檢查當天),顯示/回聲 「文件所沒有的:
如果不是C:(例如」文件改爲16:55「)今天被改變了「
最簡單的方法是啓動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"
}
你的代碼工作**但是**似乎只是顯示「文件已更改在...」如果日誌文件已**創建**,而不是**更改/更新**。 test.log不是每天創建的,它更新更多的數據。 – Tomas
對不起 - 應該是'LastWriteTime'而不是'CreationTime'。我誤解了這個問題。 –
@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
,否則它今天沒有更改。
你能發佈最早版本的Windows嗎?我發佈了一個PowerShell建議,但這隻能在Windows 2000及更高版本的內存中使用。 –