2012-07-31 49 views
3

我已经创建了一个批处理文件,该文件定期从自动作业中触发。设置批处理文件变量如果时间在指定的时间段

在批处理文件中,我想检查时间是否在12AM和8AM之间,用特定值设置变量,否则将其设置为默认值。

任何提示我怎么可能在批处理文件中做到这一点?

回答

5
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 
) 
5

我看到这已经被回答,但解决方案似乎对我来说是不必要的复杂。另外,一些额外的解释可能会派上用场去理解解决方案。

您可以通过使用%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的帮助下更正了解决方案 - 查看他的回答和评论,以查看我最初的尝试出了什么问题。

+1

你是正确的,没有需要,更容易使用子字符串,如你所建议的。但是,由于约定前缀0的数字被解释为八进制符号,因此您的答案不会按书面方式工作。你的回答需要在8之前的0来强制字符串比较。 – dbenham 2012-07-31 16:58:18

+0

呃,我刚刚看到挂在那里的“ms-dos”标签。如果你真的在MS-DOS上运行,这会变得更加困难,并且由于缺少这样一台机器,我无法提供帮助。也许[这篇文章有帮助](http://www.robvanderwoude.com/datetime.php#Prompt),它有一个关于使用'PROMPT'命令的MS-DOS日期/时间处理部分。 – zb226 2012-07-31 16:58:54

+0

@dbenham:我站好了。谢谢,这很好理解。我已经用两位数字进行了测试,因为我们已经在一天之内完成了 - 编辑。对不起,作为一个新手,我还不能支持任何东西。 – zb226 2012-07-31 17:09:38

相关问题