我每周(星期六)下午3点都没有设置计划任务的问题,但是要求如果该月的最后一天是星期六,则重启必须转到星期日下午3点。
这是我不确定的部分,因为任务调度程序似乎没有排除选项,所以想知道我的选择是什么?
答案 0 :(得分:2)
一种方法是运行脚本并检查当前日期是否是该月的最后一天。
如果是,请等待24小时重启,如果没有立即重启。
以下Powershell脚本将执行您想要的操作。每周六下午3点运行。
#Get the last day of the current month
$lastDayOfMonth = ((Get-Date).AddMonths(1)).
AddDays(-(Get-Date ((Get-Date).AddMonths(1)) -format dd)).Date
if ((Get-Date).Date -eq $lastDayOfMonth)
{
#It's the last day of this month, reboot in 24 hours (86400 seconds)
shutdown -r -t 86400
}
else
{
#Reboot immediately
shutdown -r -t 0
}
另一种解决方案可能是第三方任务调度软件。
答案 1 :(得分:2)
这是Matsnow提供的相同概念,但是作为批处理文件完成。 Powershell内置了许多面向对象的函数,因此批处理文件的代码更多。
@Echo off
REM Get Date and Time
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set yyyy=%dt:~0,4%
set mm=%dt:~4,2%
set dd=%dt:~6,2%
REM Get Last Day of month
call :DaysOfMonth %yyyy% %mm%
IF "%lastday%"=="%dd%" (
shutdown /r /t 86400
) else (
shutdown /r /t 0
)
GOTO :EOF
:DaysOfMonth Year Month
setlocal DisableDelayedExpansion
set /a "yy = %~1, mm = 100%~2 %% 100"
set /a "n = 30 + !(((mm & 9) + 6) %% 7) + !(mm ^ 2) * (!(yy %% 4) - !(yy %% 100) + !(yy %% 400) - 2)"
endlocal &set lastday=%n%
GOTO :EOF