检查时间的批处理脚本

Batch Script for Checking time

是否可以检查时间是否在两个范围之间,然后根据它执行操作。

例如:我只想在当前时间 不在 晚上 11 点到 6 点 A.M 之间时执行操作。

这是我到目前为止的内容,但我无法固定中间部分。

set "currentTime=!TIME::=!" 
set "currentTime=!currentTime:,=!"
set "_bit_compare=leq"
set "compareTime=2300"
set "compareTime1=600"

(time /t | findstr /l "AM PM" || set "_bit_compare=gtr")>nul

if "!currentTime:~0,4=!" %_bit_compare% "!compareTime!" (

    do somethinf

)

使用 PowerShell 编写相对容易。如果您使用的是受支持的 Windows 系统,则可以使用 PowerShell。这也克服了 cmd.exe.

区域差异带来的无数问题
$h = [int](Get-Date -Format "HH")
if ($h -le 8 -or $h -ge 23) { & notepad.exe }"

要在 .bat 文件脚本中使用它,您可以:

powershell -NoLogo -NoProfile -Command ^
    "$h = [int](Get-Date -Format "HH");" ^
    "if ($h -le 8 -or $h -ge 23) { & notepad.exe }"

在批处理文件中执行此操作需要多几行,但您本质上希望以标准格式获取时间。您可以通过调用 WMIC 来做到这一点。我只是用小时来比较。根据提供的示例,我认为没有必要使用分钟,因为它不在晚上 11 点到 6 点 A.M 之间。我使用 1 作为比较前缀,以防在小时内出现前导零。

@echo off

set "compareTime1=23"
set "compareTime2=06"

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 "YY=%dt:~2,2%"
SET "MM=%dt:~4,2%"
SET "DD=%dt:~6,2%"
SET "HH=%dt:~8,2%"
SET "min=%dt:~10,2%"
SET "sec=%dt:~12,2%"

IF 1%HH% LSS 1%compareTime1% IF 1%HH% GTR 1%compareTime2% (
    ECHO LETS DO SOMETHING
)

为了证明我的评论,使用 , (), from a :

<!-- :
@"%__AppDir__%cscript.exe" //NoLogo "%~f0?.wsf"
@If ErrorLevel 1 Exit /B
@Rem Your Commands go below here
@Echo Within range
@Pause
@Rem Your commands end above here
@Exit /B
-->
<Job><Script Language="VBScript">
        If Hour(Now())<=22 AND Hour(Now())>=6 Then
            WScript.Quit(0 Mod 255)
        Else
            WScript.Quit(1 Mod 255)
        End If
</Script></Job>

我使用 Remarks 向您展示了放置命令的位置,并提供了两行用于演示目的,(测试后您可以自由删除).