Ну, в пакете проще всего было бы периодически проверять, не изменилась ли дата последнего изменения файла и / или его размер.
Вы можете получить и то, и другое:
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
}