win cmd: set /a 值在 %value% 的后续操作中重新分配
win cmd: set /a value is reassigned on subsequent operations on %value%
尝试 运行 Windows cmd 中的一个单行(对 unix 俄罗斯轮盘赌的看法):
set /a nr=%random%*6/32768-0 & if %nr%==0 (echo lost) else (echo joy)
收益率,例如:
0 joy
3 lost
这毫无意义。因此,为 %nr% 添加回显:
set /a nr=%random%*6/32768-0 & echo "echo nr: %nr%" & if %nr%==0 (echo lost) else (echo joy)
结果:
0 "echo nr: 3" joy
1 "echo nr: 0" lost
问题很明显:为什么要重新分配变量? (重新分配只发生一次。如果使用 %nr% 的链式操作,它们将始终使用重新分配的值)。有人可以阐明这种行为吗?它很快就从烦人变成了莫名其妙。
谢谢,周末愉快。
批处理检查每一行,用该变量的当前值替换任何 %var%
,然后执行结果行,因此,if
作用于变量的内容 之前它被分配了一个新值。
请阅读与 delayedexpansion
相关的数千个 SO 项目中的任何一个以了解解决策略,其中最简单的一个是使用两条单独的线
set /a nr=%random%*6/32768-0
if %nr%==0 (echo lost %nr%) else (echo joy %nr%)
或
set /a nr=%random%*6/32768-0
if %nr%==0 (
echo lost %nr%
) else (
echo joy %nr%
)
其中 if
语句的 5 行被视为一个 逻辑 行。
您没有说明是在提示符下还是从批处理中执行命令。那样就好了。
尝试 运行 Windows cmd 中的一个单行(对 unix 俄罗斯轮盘赌的看法):
set /a nr=%random%*6/32768-0 & if %nr%==0 (echo lost) else (echo joy)
收益率,例如:
0 joy
3 lost
这毫无意义。因此,为 %nr% 添加回显:
set /a nr=%random%*6/32768-0 & echo "echo nr: %nr%" & if %nr%==0 (echo lost) else (echo joy)
结果:
0 "echo nr: 3" joy
1 "echo nr: 0" lost
问题很明显:为什么要重新分配变量? (重新分配只发生一次。如果使用 %nr% 的链式操作,它们将始终使用重新分配的值)。有人可以阐明这种行为吗?它很快就从烦人变成了莫名其妙。
谢谢,周末愉快。
批处理检查每一行,用该变量的当前值替换任何 %var%
,然后执行结果行,因此,if
作用于变量的内容 之前它被分配了一个新值。
请阅读与 delayedexpansion
相关的数千个 SO 项目中的任何一个以了解解决策略,其中最简单的一个是使用两条单独的线
set /a nr=%random%*6/32768-0
if %nr%==0 (echo lost %nr%) else (echo joy %nr%)
或
set /a nr=%random%*6/32768-0
if %nr%==0 (
echo lost %nr%
) else (
echo joy %nr%
)
其中 if
语句的 5 行被视为一个 逻辑 行。
您没有说明是在提示符下还是从批处理中执行命令。那样就好了。