我创建了一个定期从自动作业触发的批处理文件。
在批处理文件中,我想检查时间是否在12 AM到8 AM之间,设置一个具有特定值的变量,否则,将其设置为默认值。
有关如何在批处理文件中执行此操作的任何提示?
答案 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的帮助下纠正解决方案 - 查看他的回答并发表评论,看看我原来的尝试出了什么问题。