![](/img/trans.png)
[英]Windows Batch file to check modified date of file and output to log file if not a specific value
[英]Windows batch file - check if file has been modified
我正在配置 Windows 機器以連續運行 PowerPoint 演示文稿。 ppt 文件位於 samba 共享(windows 文件共享)上,會定期更新。 我需要一種方法來制作一個批處理文件,如果文件已更改,該文件將重新啟動 ppt 幻燈片放映。 批處理腳本將定期運行,並希望檢查文件是否已更新,如果已更新,則重新啟動幻燈片。
如果有辦法在 powershell 中做到這一點,那也行。
好吧,在批處理中,我想到的最簡單的方法是定期檢查文件的上次修改日期和/或其大小是否已更改。
您可以通過以下方式獲得兩者:
for %%X in (myfile) do set size=%%~zX&set filetime=%%~tX
然后,您可以緩存這些值並比較它們自上次迭代以來是否已更改。 通過使用延遲(可能幾秒鍾)
ping -n 11 localhost >nul 2>nul
(延遲 10 秒)可以幫助不檢查太頻繁。
所以,它可能看起來有點像下面這樣:
@echo off
setlocal
set FileName=MyPresentation.pptx
set FileTime=-
:loop
for %%X in (%FileName%) do (
if %FileTime% NEQ %%~tX (
rem just an example
taskkill /f powerpnt.exe
start %FileName%
)
set FileTime=%%~tX
)
rem wait 5 seconds before checking again
ping -n 6 localhost >nul 2>nul
goto :loop
在 PowerShell 中,代碼看起來不會有太大不同,只是您可以更輕松地訪問相關屬性:
$FileName = "MyPresentation.pptx"
$FileTime = Get-Date
# endless loop
for () {
$file = Get-Item $FileName
if ($FileTime -ne $file.LastWriteTime) {
Get-Process powerpnt* | Stop-Process
Invoke-Item $file
}
$FileTime = $file.LastWriteTime
Start-Sleep 5
}
試試下面的代碼。 它檢查當前時間並檢查文件上次修改的時間。 如果兩個值相同,則假定文件已更改。
@echo off &setlocal
TITLE File Monitor
Set file=Test.txt
:CheckforAlter
Set modif_time=
Set allm=
cls
for /f "tokens=1-3 delims=:,. " %%A in ("%time%") do (
set "Hour=%%A"
set "Min=%%B"
set "Sec=%%C"
)
set /a Hour = Hour %% 12
if %Hour%==0 set "Hour=12"
set "Allm=%Hour%:%Min%:%Sec%"
for /f %%i in ('"forfiles /m %file% /c "cmd /c echo @ftime" "') do set modif_time=%%i
echo.
echo.
IF %modif_time%==%Allm% (
echo File was altered.
start "" "%file%"
Timeout /t 1 >nul
)
echo file wasn't modified.
GOTO CheckforAlter
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.