我创建了一个批处理文件,该文件定期从自动化作业中触发。
在批处理文件中,我想检查时间是否在上午 12 点到上午 8 点之间,设置一个具有特定值的变量,否则,将其设置为默认值。
任何提示我如何在批处理文件中执行此操作?
我创建了一个批处理文件,该文件定期从自动化作业中触发。
在批处理文件中,我想检查时间是否在上午 12 点到上午 8 点之间,设置一个具有特定值的变量,否则,将其设置为默认值。
任何提示我如何在批处理文件中执行此操作?
我看到这已经得到了回答,但解决方案对我来说似乎不必要地复杂。此外,一些额外的解释可能有助于理解解决方案。
您可以使用以下命令访问批处理文件中的当前时间%TIME%
:
C:\>echo %TIME%
18:01:52,64
您可以使用以下语法访问%TIME%
(或任何其他变量)的子字符串:
C:\>echo %TIME:~0,2%
18
因此,要按照您的描述有条件地设置变量,您将执行以下操作:
IF %TIME:~0,2% LSS 08 ( SET VAR=particularValue ) ELSE ( SET VAR=defaultValue )
编辑:在@dbenham 的帮助下更正了解决方案 - 查看他的回答和评论,看看我最初的尝试有什么问题。
for /f "delims=:." %%T in ("%time%") do if %%T lss 08 (set var=someValue) else (set var=default)
编辑- zb226 是正确的 - 上面比需要的更复杂。做起来简单得多
if %time:~0,2% lss 08 (set var=someValue) else (set var=default)
08 中的前导 0 很关键。原因是 0 前面的数字被视为八进制表示法,而 8 和 9 不是有效的八进制数字。如果在任一侧看到无效的八进制数,IF 语句将进行字符串比较。因此,如果当前小时为 09,09 lss 8
则为 TRUE,因为 0 在 8 之前排序。更改为09 lss 08
给出正确答案。
如果恰好是上午 8:00:00.00,则上述任一解决方案都将值设置为默认值。如果您真的想要上午 8:00:00.00 之前的“特定值”并在之后的任何时间默认,那么它有点复杂。在那种情况下,我会回到 FOR 解决方案。
for /f "tokens=1-4 delims=:." %%A in ("%time%") do (
set var=default
if %%A lss 08 set var=someValue
if %%A%%B%%C%%D equ 08000000 set var=someValue
)