2012-01-19 103 views
2

我們想知道自上次運行腳本後Windows系統上的文件是否已被修改。在Unix中,我們可以這樣做:在批處理文件中查找基於時間的文件

if [ "$file" -nt "$touch" ] 
then 
     echo "$file has been changed!" 
     touch "$touch" 
fi 

我需要對Windows批處理腳本做同樣的事情。不,我不能使用Perl,Python,Ruby,Cygwin或PowerShell。它們在這臺特定的服務器上不可用。事實上,我無法訪問此服務器。我想創建一個批處理腳本並讓別人安裝它並希望它能正常工作。

是的,工作每天都會變得更加funner和funner!

回答

2

只要批處理腳本和測試文件位於同一個目錄中且批處理腳本不是隻讀,這應該工作。如果通過將多個文件名以空格作爲分隔符附加到file變量,可以調整它以適應多個文件中的任何一個文件已被更新。

@echo off 
setlocal 
set file="test.txt" 

pushd %~dp0 
for /f %%F in ('dir /b /o-d "%~nx0" %file%') do (
    if "%%~F" neq "%~nx0" (
    echo %file% has changed 
    rem Below is weird syntax for updating timestamp of this batch script 
    copy "%~nx0"+,, >nul 
) 
    goto :continue 
) 
:continue 
popd 
+0

編輯 - 如果當前目錄與批處理目錄不匹配,則原始代碼失敗。修改後的代碼應該可以工作 – dbenham

+0

您可以調整它以採用'dir'中的/ t開關來比較上次寫入的日期/時間。 – Mechaflash

+0

@Mechaflash - 我的理解是最後寫的時間是默認的,我的測試似乎支持了這一點。添加'/ TW'不會傷害,但我認爲這不會有什麼區別。 – dbenham

相關問題