我已经创建了一个批处理文件,该文件定期从自动作业中触发。设置批处理文件变量如果时间在指定的时间段
在批处理文件中,我想检查时间是否在12AM和8AM之间,用特定值设置变量,否则将其设置为默认值。
任何提示我怎么可能在批处理文件中做到这一点?
我已经创建了一个批处理文件,该文件定期从自动作业中触发。设置批处理文件变量如果时间在指定的时间段
在批处理文件中,我想检查时间是否在12AM和8AM之间,用特定值设置变量,否则将其设置为默认值。
任何提示我怎么可能在批处理文件中做到这一点?
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 AM,则将上述任一解决方案设置为默认值。如果您确实希望在上午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
)
我看到这已经被回答,但解决方案似乎对我来说是不必要的复杂。另外,一些额外的解释可能会派上用场去理解解决方案。
您可以通过使用%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的帮助下更正了解决方案 - 查看他的回答和评论,以查看我最初的尝试出了什么问题。
你是正确的,没有需要,更容易使用子字符串,如你所建议的。但是,由于约定前缀0的数字被解释为八进制符号,因此您的答案不会按书面方式工作。你的回答需要在8之前的0来强制字符串比较。 – dbenham 2012-07-31 16:58:18
呃,我刚刚看到挂在那里的“ms-dos”标签。如果你真的在MS-DOS上运行,这会变得更加困难,并且由于缺少这样一台机器,我无法提供帮助。也许[这篇文章有帮助](http://www.robvanderwoude.com/datetime.php#Prompt),它有一个关于使用'PROMPT'命令的MS-DOS日期/时间处理部分。 – zb226 2012-07-31 16:58:54
@dbenham:我站好了。谢谢,这很好理解。我已经用两位数字进行了测试,因为我们已经在一天之内完成了 - 编辑。对不起,作为一个新手,我还不能支持任何东西。 – zb226 2012-07-31 17:09:38