3

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

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

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

4

2 回答 2

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 的帮助下更正了解决方案 - 查看他的回答和评论,看看我最初的尝试有什么问题。

于 2012-07-31T16:14:32.203 回答
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,则上述任一解决方案都将值设置为默认值。如果您真的想要上午 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
)
于 2012-07-31T16:01:57.180 回答