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 也知道八进制数。它们从零开始。 0809 以零开头,但不是有效的八进制数,因此我们会收到语法错误。因此,我们在它前面加上 1 并从中减去 100 以获得有效的十进制数 (8)。我们只需执行 MOD 2 以获得偶数的零和奇数的一。

【讨论】:

以上是关于cmd批处理文件检查当前时间是不是等于特定时间之一的主要内容,如果未能解决你的问题,请参考以下文章

cmd中if条件“and”/“or”的批处理文件问题

有条件地检查数组是不是等于特定值[重复]

淘汰赛自定义验证:如何检查 observable 是不是等于特定值?

ios nstimer 在后台运行以检查警报时间是不是等于当前时间并播放音频

我可以检查散列密码是不是等于 laravel 中的特定值?

cmd dos 检查远程FTP文件夹是不是存在