Batch file 批处理脚本:两位数小于一位数
我是批处理脚本新手,不明白为什么两位数的值小于一位数 %echo'd时,weekdayOffPeakEnd%变量为7 我在FOR循环(未显示)中调用这个sleepUntilOffPeak函数,但我认为这没有任何影响,因为我在脚本中的任何其他地方都没有使用这个函数中的任何变量。此功能只需检查当前小时并“睡眠”,直到电价再次降低 ThxBatch file 批处理脚本:两位数小于一位数,batch-file,numbers,compare,Batch File,Numbers,Compare,我是批处理脚本新手,不明白为什么两位数的值小于一位数 %echo'd时,weekdayOffPeakEnd%变量为7 我在FOR循环(未显示)中调用这个sleepUntilOffPeak函数,但我认为这没有任何影响,因为我在脚本中的任何其他地方都没有使用这个函数中的任何变量。此功能只需检查当前小时并“睡眠”,直到电价再次降低 Thx 你有很多这样的例子: if Hour LSS weekdayOffPeakEnd ( 这将比较文字Hour与文字weekdayOffPeakEnd 你需要 if
你有很多这样的例子:
if Hour LSS weekdayOffPeakEnd (
这将比较文字Hour
与文字weekdayOffPeakEnd
你需要
if %Hour% LSS %weekdayOffPeakEnd% (
此外,如果更改代码块内任何变量的值(括号内的代码),则需要使用检索更改后的值!瓦尔代码>调用了延迟扩展
(使用搜索
查找许多SO项目)
此外,您还观察到set/a var=07
会将变量设置为7
,而不是07
。理解set/a
和set
之间的区别很重要set/a
解析要分配的值,然后将该值作为字符串分配给变量,并抑制前导零<代码>设置
指定包含前导零的文字
这将导致两个后果。首先,以
0
开头的值由set/a
指定为八进制值,因此08
和09
将无效。其次,如果%var%op val
将尝试将运算符的两个参数转换为数值以执行比较,如果两个转换都成功,则比较将作为数值比较执行,否则,它将作为字符串比较执行,其中字符从左侧连续匹配。如果使用set/a
时%DayOfWeek%eq 0 set weekday=false,请使用此语法。另一条建议是让您仔细阅读延迟扩展。感谢您的指导和解释如何评估if语句。所有if-else语句现在都在工作,我已经对set/a sleepHours=7-Hour语句进行了硬编码,以避免07被解释为八进制。不幸的是,睡眠时间没有分配任何值。请告知。您需要调用delayedexpansion[数百篇关于此的文章-使用搜索功能],以便显示或使用在括号内的一系列指令(也称为“代码块”)中更改的任何变量的运行时值。对不起,我应该提到;我已经在使用SETLOCAL EnableDelayedExpansion。sleepHours变量不在其自身代码块之外使用。它是在最终else语句中为工作日或周末父代码块创建和设置的(未成功)。以下情况均不会导致填充sleepHours变量:set/a sleepHours=23小时、set/a sleepHours=23-%Hour%或set/a sleepHours=23-!小时!如果%weekday%eq true(
),代码块将从开始,并在发布代码的最后一个)
处终止。由于sleephours
是在set/a sleephours=%weekendOffPeakStart%-%Hour%
的块内分配的,因此对其内容的任何进一步引用必须为!睡觉时间代码><代码>%sleephours%
将在遇到整个块时替换当时的当前值sleephours
。请注意,在集合/a
中,%var%
指遇到块时变量的值,!瓦尔代码>其当前值可能已被修改,&var
也可用于表示“当前值”。非常感谢。你上面的最后一句话触发了我脑海中的灯泡:)
if %Hour% LSS %weekdayOffPeakEnd% (