1 windows powershell batch-file
我正在配置一台 Windows 计算机以连续运行 Powerpoint 演示文稿。ppt 文件位于 samba 共享(windows 文件共享)上,并将定期更新。我需要一种方法来制作一个批处理文件,如果文件已更改,该文件将重新启动 ppt 幻灯片放映。批处理脚本将定期运行,并希望检查文件是否已更新,如果已更新,则重新启动幻灯片。
如果有一种方法可以在 powershell 中执行此操作,那也可以。
好吧,在批处理中,我想到的最简单的方法是定期检查文件的上次修改日期和/或其大小是否已更改。
您可以通过以下方式获得两者:
for %%X in (myfile) do set size=%%~zX&set filetime=%%~tX
Run Code Online (Sandbox Code Playgroud)
然后,您可以缓存这些值并比较它们自上次迭代以来是否已更改。使用延迟(可能几秒钟)通过
ping -n 11 localhost >nul 2>nul
Run Code Online (Sandbox Code Playgroud)
(延迟 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
Run Code Online (Sandbox Code Playgroud)
在 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
}
Run Code Online (Sandbox Code Playgroud)