我希望批处理文件中的命令仅在过去 15 分钟内未运行时才执行。为了实现这一点,我可以创建一个“last_run”文件来记录上次运行的时间。
我陷入困境的地方是将上次修改时间与当前时间进行比较,如果上次修改时间则采取行动。
这是我当前的代码:
@echo off
set filename=last_run.txt
if not exist %filename% (
rem NOT EXISTS, CREATE FILE THEN PRINT THE LIST
echo.>"%filename%"
GOTO PrintList
) else (
rem FILE EXISTS, GET TIME LAST MODIFIED
FOR %%? IN (%filename%) DO (set filetime=%%~t?)
echo %filetime%
rem IF TIME LAST MODIFIED > 15 MINS PRINT THE LIST
if timediff??(%filetime%, current) > 15 mins {
GOTO PrintList
} else {
GOTO End
}
)
:PrintList
rem PRINT THE LIST
echo now print the list
rem WRITE TO THE FILE TO UPDATE TIME LAST MODIFIED
echo.>"%filename%"
GOTO End
:End
最佳答案
使用 powershell 的另一个实现来自您的batch-file :
@Echo Off
Set "filename=last_run.txt"
Set "minutes=15"
If Not Exist "%filename%" GoTo :PrintList
"%__APPDIR__%WindowsPowerShell\v1.0\powershell.exe" -NoProfile If(((Get-Date)-(Get-Item ".\%filename%").LastWriteTime).Minutes -LT %minutes%){Exit 1}
If ErrorLevel 1 Exit /B
Rem Your payload below here.
:PrintList
CD.>"%filename%"
如果您愿意接受运行此代码的 PC 将始终在 %PATH%
和 %PATHEXT%
中具有适当的条目,您可以更改“%__APPDIR__%WindowsPowerShell\v1.0\powershell.exe”
为 PowerShell
。
关于datetime - 将当前时间与 Windows 批处理文件中上次修改的文件日期时间进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60280334/