ama*_*eur 3 dos batch-file batch-processing
我创建了一个定期从自动作业触发的批处理文件.
在批处理文件中,我想检查时间是否在12AM到8AM之间,设置一个具有特定值的变量,否则,将其设置为默认值.
我有什么技巧可以在批处理文件中做到这一点?
for /f "delims=:." %%T in ("%time%") do if %%T lss 08 (set var=someValue) else (set var=default)
Run Code Online (Sandbox Code Playgroud)
编辑 - zb226是正确的 - 上面比需要的更复杂.更简单的事情
if %time:~0,2% lss 08 (set var=someValue) else (set var=default)
Run Code Online (Sandbox Code Playgroud)
08年的领先0是至关重要的.原因是前面带0的数字被视为八进制表示法,而8和9则不是有效的八进制数字.如果IF语句在任何一方看到无效的八进制数,它将进行字符串比较.因此,如果当前小时为09,09 lss 8则为0 ,因为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
)
Run Code Online (Sandbox Code Playgroud)
我看到这已经得到了解答,但解决方案似乎对我来说不必要的复杂.此外,一些额外的解释可能会派上用场来理解解决方案.
您可以使用以下命令访问批处理文件中的当前时间%TIME%:
C:\>echo %TIME%
18:01:52,64
Run Code Online (Sandbox Code Playgroud)
您可以使用以下语法来访问%TIME%(或任何其他变量)的子字符串:
C:\>echo %TIME:~0,2%
18
Run Code Online (Sandbox Code Playgroud)
因此,要按照您的描述有条件地设置变量,您可以:
IF %TIME:~0,2% LSS 08 ( SET VAR=particularValue ) ELSE ( SET VAR=defaultValue )
Run Code Online (Sandbox Code Playgroud)
编辑:在@dbenham的帮助下纠正解决方案 - 查看他的回答和评论,看看我原来的尝试出了什么问题.