如果时间在指定的时间段内,则设置批处理文件变量

时间:2012-07-31 15:20:40

标签: batch-file dos batch-processing

我创建了一个定期从自动作业触发的批处理文件。

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

有关如何在批处理文件中执行此操作的任何提示?

2 个答案:

答案 0 :(得分: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 AM之前的“特定值”并且在任何时间之后默认,那么它会更复杂一些。在那种情况下,我会回到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
)

答案 1 :(得分: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的帮助下纠正解决方案 - 查看他的回答并发表评论,看看我原来的尝试出了什么问题。