簡體   English   中英

Windows 批處理文件 - 檢查文件是否已被修改

[英]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

發現這個:

@echo off
if not "%~1"=="" echo Modified date of %~1 is %~t1

關於專家交流 也許是一個很好的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM