Batch file 批处理脚本:两位数小于一位数

Batch file 批处理脚本:两位数小于一位数,batch-file,numbers,compare,Batch File,Numbers,Compare,我是批处理脚本新手,不明白为什么两位数的值小于一位数 %echo'd时,weekdayOffPeakEnd%变量为7 我在FOR循环(未显示)中调用这个sleepUntilOffPeak函数,但我认为这没有任何影响,因为我在脚本中的任何其他地方都没有使用这个函数中的任何变量。此功能只需检查当前小时并“睡眠”,直到电价再次降低 Thx 你有很多这样的例子: if Hour LSS weekdayOffPeakEnd ( 这将比较文字Hour与文字weekdayOffPeakEnd 你需要 if

我是批处理脚本新手,不明白为什么两位数的值小于一位数

%echo'd时,weekdayOffPeakEnd%变量为7

我在FOR循环(未显示)中调用这个sleepUntilOffPeak函数,但我认为这没有任何影响,因为我在脚本中的任何其他地方都没有使用这个函数中的任何变量。此功能只需检查当前小时并“睡眠”,直到电价再次降低

Thx


你有很多这样的例子:

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% (