标题: [其他] 批处理echo输出为何显示“处于关闭状态”? [打印本页]
作者: winger_w 时间: 2010-12-22 17:44 标题: 批处理echo输出为何显示“处于关闭状态”?
本帖最后由 pcl_test 于 2016-11-16 09:35 编辑
代码如下:- @echo off
-
- set /a loop=0
- :loop
- set /a loop+=1
-
- set input=%loop%
-
- echo %input%
- echo %input%>>a.txt
-
- pause
-
- goto loop
复制代码
运行结果:
1
2
echo处于关闭状态
...
实在不明白为什么会出现echo处于关闭状态。
[ 本帖最后由 winger_w 于 2010-12-22 19:16 编辑 ]
作者: Batcher 时间: 2010-12-22 19:19
- @echo off
- set /a loop=0
- :loop
- set /a loop+=1
- set input=%loop%
- echo,%input%
- >>a.txt echo,%input%
- pause
- goto :loop
复制代码
作者: winger_w 时间: 2010-12-22 19:24
请问能讲解一下为什么吗?
作者: winger_w 时间: 2010-12-22 19:41
主要是想知道那段问题代码为什么会有错误,能指点一下吗?
作者: mac007cn 时间: 2010-12-22 20:15
就是啊,挺奇怪的。2楼的给解释一下呗
作者: winger_w 时间: 2010-12-22 20:19
- @echo off
- set /a loop=0
- :loop
- set /a loop+=1
- >>a.txt echo %loop%
- pause
- goto :loop
复制代码
我刚试了,这样也能有正确的结果
但是还是不明白为什么写成echo %loop%>>a.txt就不行了
作者: Batcher 时间: 2010-12-22 20:37 标题: 回复 4楼 的帖子
你把@echo off删掉,再执行一遍看看吧。
作者: ithinkican 时间: 2010-12-22 22:55
请添加
setlocal enabledelayedexpansion
在set /a loop=0前面就不会出现"ECHO处于关闭状态…"了。
作者: hanyeguxing 时间: 2010-12-23 03:15
echo %input%>>a.txt
%input%的部分内容会成为>>的句柄而产生错误
作者: winger_w 时间: 2010-12-23 09:30 标题: 回复 8楼 的帖子
的确使用延迟扩展是没有问题,但是,
这里的echo %input%>>a.txt是一个完整的命令,input在执行扩展前已经被更新为新的值了,我觉得不存在延迟扩展的问题
作者: winger_w 时间: 2010-12-23 09:32 标题: 回复 9楼 的帖子
部分内容成为>>的句柄怎么理解?%input%在第二次循环时,内容就是2了~~~
作者: winger_w 时间: 2010-12-23 09:36
我又试了,这个应该是cmd的一个bug。
如果改成- @echo off
- set /a loop=10
- :loop
- set /a loop+=1
- echo %loop%>>a.txt
- pause
- goto :loop
复制代码
得到的是正确的结果。
如果loop为个位数1,%loop%会被认为是" 1",前面有个空格,但是如果是两位数10,就被认为是"10",前面没有空格。。。。
当echo 1时(注意,1前面有两个空格),此时cmd会认为这句话就是echo,从而输出"echo处于关闭状态"。
作者: Batcher 时间: 2010-12-23 09:46 标题: 回复 12楼 的帖子
三个默认的句柄:
0代表标准输入
1代表标准输出
2代表出错
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |