标题: [数值计算] 批处理启用变量延迟时,Set与echo同行会出现意外结果 [打印本页]
作者: 练习 时间: 2021-2-2 00:02 标题: 批处理启用变量延迟时,Set与echo同行会出现意外结果
问题描述:
启用变量延迟,用&将Set命令与echo命令合并为一行,出现意外结果。
初学,测试很久不得其解。
请各位前辈指点迷津,先行拜谢。
执行出错代码如下:- echo 测试1_结果错误:数值大于100。
- setlocal enabledelayedexpansion
- set s=100 & echo !s!
-
- if !s! EQU 100 (echo 数值等于100)
- if !s! gtr 100 (echo 数值大于100) && echo !s!
- pause
复制代码
只要不启用变量延迟,或者启用时把Set命令与echo命令分行写,
执行就没有问题。如以下3个测试:
测试2:启用变量延迟,命令分行写:- echo 测试2_结果正确:数值等于100
- setlocal enabledelayedexpansion
- set s=100
- echo !s!
-
- if !s! EQU 100 (echo 数值等于100)
- if !s! gtr 100 (echo 数值大于100)
- pause
复制代码
测试3:不启用变量延迟,命令合并写:- echo 测试3_正确:数值等于100
- set s=100 & echo %s%
-
- if %s% EQU 100 (echo 数值等于100)
- if %s% gtr 100 (echo 数值大于100)
- pause
复制代码
测试4:不启用变量延迟,命令分行写:- echo 测试4_正确:数值等于100
- set s=100
- echo %s%
-
- if %s% EQU 100 (echo 数值等于100)
- if %s% gtr 100 (echo 数值大于100)
- pause
复制代码
作者: WHY 时间: 2021-2-2 09:21
本帖最后由 WHY 于 2021-2-2 09:23 编辑
复制代码
不加引号的话,变量s的值是 100+空格
启用变量延迟后,空格也参与到 if 比较了。
作者: cutebe 时间: 2021-2-2 09:28
复制代码
同意楼上,加上括号发现有空格:[100 ]
去掉100与&之间的空格也行复制代码
作者: 练习 时间: 2021-2-2 20:44
多谢WHY 和cutebe两位前辈指点!
果然是这样的,100后面多了个空格。
以前认为用&连接两个命令时,其前后必须要加空格,
今天才知道原来批处理中“&”的前面不用空格,测试了一下,发现后面也不需要空格。
可以用:【命令1&命令2】的形式。
或者在set语句中,用双引号把赋值语句括起来之后,再加空格,然后接“&下一命令”。
cutebe前辈使用的查错方法也很巧妙。
我刚才用“>”把变量的值输出到txt文件中,也查出了同样的错误。
但是显然用echo [变量] 的方式查错更简洁!
作者: 练习 时间: 2021-2-2 20:45
多谢WHY 和cutebe两位前辈指点!
果然是这样的,100后面多了个空格。
以前认为用&连接两个命令时,其前后必须要加空格,
今天才知道原来批处理中“&”的前面不用空格,测试了一下,发现后面也不需要空格。
可以用:【命令1&命令2】的形式。
或者在set语句中,用双引号把赋值语句括起来之后,再加空格,然后接“&下一命令”。
cutebe前辈使用的查错方法也很巧妙。
我刚才用“>”把变量的值输出到txt文件中,也查出了同样的错误。
但是显然用echo [变量] 的方式查错更简洁!
作者: 练习 时间: 2021-2-2 20:50
刚才回复时没反应,多点了几次,刷新后发现回了两次!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |