cmd批处理文件检查当前时间是不是等于特定时间之一
Posted
技术标签:
【中文标题】cmd批处理文件检查当前时间是不是等于特定时间之一【英文标题】:cmd batch file check if current hour is equal to one of specific hourcmd批处理文件检查当前时间是否等于特定时间之一 【发布时间】:2021-08-07 09:45:33 【问题描述】:我想开发一个批处理文件来检查当前时间小时是否等于特定小时。
只要n+2小时(如0、2、4、6、8、10等)与系统当前小时匹配,就会回显到有效消息,否则回显到无效消息.
有人可以帮助我吗?谢谢。
源代码
FOR /F %%a IN ('Powershell -Nop -c "Get-Date -Format 'HH'"') DO SET getcurrHour=%%a
FOR /L %%a IN (0,2,22) DO SET hourList=%%a
IF %getcurrHour% == %hourList% (
ECHO It's valid.
) ELSE (
ECHO It's not valid.
)
【问题讨论】:
Powershell 比批处理更强大。为什么要使用批处理来评估 Powershell 结果? 【参考方案1】:您需要测试循环中的每个值,而不是设置最后一个值并进行测试。
然而还有另一个问题。 Powershell
的日期返回为 HH
,这样可以:
02
etc
22
for /L
循环给出的位置:
2
etc
22
对于某些数字来说,这不是真的。所以我们需要测试循环是单数还是双数,如果单数我们添加一个前导0
@echo off
setlocal enabledelayedexpansion
for /f %%a in ('Powershell -Nop -c "Get-Date -Format 'HH'"') do set "getcurrHour=%%a"
for /L %%a IN (0,2,22) do (
set "li=%%~a"
if "!li:~1!" == "" set "li=0!li!"
if %getcurrHour% equ !li! (
echo It's valid.
) else (
echo It's not valid.
)
)
【讨论】:
【参考方案2】:如果您无论如何都在使用 PowerShell,那么让它为您完成更多工作。
@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoProfile^
"$Hr = (Get-Date).Hour;"^
"If (((($Hr / 2) - [Math]::Truncate($Hr / 2)) * 10) -Eq 5)"^
" Write-Host \"It's not valid.\" "^
"Else Write-Host \"It's valid.\" "
@Pause
@Pause
仅适用于直接从 GUI 进行测试的用户,对于其他用户可以省略
为了减少我用来证明观点的代码量,这里有一个更具体的示例,用于您在问题中提出的任务,即确定小时是奇数还是偶数:
@powershell.exe -NoP "If (((Get-Date).Hour %% 2) -Eq 1) Write-Host \"It's not valid.\" Else Write-Host \"It's valid.\" "
@Pause
再一次,只有通过 GUI 调用批处理文件的用户才需要暂停。
因为不可避免地,您会告诉我们您并不是真的想将消息打印到屏幕上,而是要根据奇数或偶数结果执行不同的操作:
@For /F %%G In ('powershell.exe -NoP "(Get-Date).Hour %% 2"') Do @If %%G Equ 1 (Echo It's not valid) Else Echo It's Valid.
@Pause
【讨论】:
感谢您的帮助并教我如何操作! :-)【参考方案3】:FOR /F %%a IN ('Powershell -Nop -c "Get-Date -Format 'HH'"') DO SET getcurrHour=%%a
set /a "check=(1%getcurrhour%-100) %%2"
if "%check%" == "0" (
echo even hour
) else (
echo odd hour
)
我猜,set /a "check=(1%getcurrhour%-100) %%2
这行需要解释一下:
set /a
也知道八进制数。它们从零开始。 08
和 09
以零开头,但不是有效的八进制数,因此我们会收到语法错误。因此,我们在它前面加上 1
并从中减去 100
以获得有效的十进制数 (8
)。我们只需执行 MOD 2
以获得偶数的零和奇数的一。
【讨论】:
以上是关于cmd批处理文件检查当前时间是不是等于特定时间之一的主要内容,如果未能解决你的问题,请参考以下文章
淘汰赛自定义验证:如何检查 observable 是不是等于特定值?