我正在配置一台windows计算机以连续运行powerpoint演示文稿。ppt文件位于samba共享(windows文件共享)上,并将定期更新。我需要一种方法来使批处理文件,将重新启动的ppt幻灯片放映,如果该文件已被更改。批处理脚本将定期运行,并有望检查文件是否已更新,如果已更新,则重新启动幻灯片。
如果有一种方法可以在powershell中做到这一点,那也是可行的。
发布于 2009-10-05 15:07:39
好吧,在批处理中,我想到的最简单的方法是定期检查文件的最后修改日期和/或其大小是否已更改。
您可以通过以下方式获取这两种方法:
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
}发布于 2019-12-30 13:04:40
尝试下面的代码。它检查当前时间,并检查文件的最后修改时间。如果这两个值相同,则假定文件已被更改。
@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发布于 2009-10-05 15:05:37
找到了这个:
@echo off
if not "%~1"=="" echo Modified date of %~1 is %~t1在Experts exchange上。也许这是一个很好的起点。
https://stackoverflow.com/questions/1520643
复制相似问题