中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助!!想不到的奇异的结果
作者:
标题: 求助!!想不到的奇异的结果 上一主题 | 下一主题
tadonis
初级用户





积分 38
发帖 10
注册 2008-5-20
状态 离线
『楼 主』:  求助!!想不到的奇异的结果

1.bat:
******************************
@echo off
color f0
setlocal ENABLEDELAYEDEXPANSION
for /l %%i in (1,1,13) do (
    for /l %%j in (1,1,13) do ( call 2.bat %%i %%j ) )
******************************************
2.bat:
******************************************
@echo off
color f0
setlocal ENABLEDELAYEDEXPANSION
for /d %%k in (+,-,/) do ( set/a a=%1%%k%2&echo %1%%k%2=!a!>>jieguo.txt)
set/a aa=%1*%2
echo %1*%2=%aa%>>jieguo.txt
echo.>>jieguo.txt
*******************************************************
jieguo.txt:
*******************************************************
1+1=2
1-1=0
1/1=1
1*1=

1+2=3
1-2=-1
1/2=0

1+3=4
1-3=-2
1/3=0

1+4=5
1-4=-3
1/4=0

1+5=6
1-5=-4
1/5=0

1+6=7
1-6=-5
1/6=0

1+7=8
1-7=-6
1/7=0

1+8=9
1-8=-7
1/8=0

1+9=10
1-9=-8
1/9=0

1+10=11
1-10=-9
1/10=0
1*10=10

1+11=12
1-11=-10
1/11=0
1*11=11

1+12=13
1-12=-11
1/12=0
1*12=12
**************************************************
问题:为什么前面的1*1没结果和1*2,1*3是没有显示出来的???
大侠们。帮帮忙阿,谢谢



ping mm
来自mm的回复:我喜欢你
2008-5-24 00:05
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




积分 11386
发帖 4938
注册 2006-7-23
状态 离线
『第 2 楼』:  TO tadonis:



  Quote:
echo %1*%2=%aa%>>jieguo.txt

因为这一句中,%aa% 的结果有可能是1、2、3、……、9这些不小于10的整数。

在 CMD 中,如果这些整数出现在重定向符号(>、>>)的前面,那么它的作用就变成了指定重定向的文件句柄了。

其中 1 代表标准输出,这也是为什么1*1=1的结果显示为“1*1=”的原因了,因为最后一个1出现在>>符号的前面,它的含义已经发生了变化。

而 2 代表标准错误输出,这个时候1*2的时候结果显示为“1*2=2”,而这个2正好位于重定向符号的前面,所以代表的是标准错误输出句柄,也就是说 CMD 只把这个命令输出的错误结果才输出到 jieguo.txt 文件中,而正确的“1*2=2“反而没有输出到 jieguo.txt 文件中,这也是为什么1*2=2没有在 jieguo.txt 文件中存在的原因。

其实 3 到 9 没有出现在文件中,也是因为 3 到 9 是 CMD 保留的特殊的文件句柄的原因。

你可以搜索以前相关的讨论贴来了解文件句柄的含义和用法。

2008-5-24 14:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
netwinxp
高级用户





积分 741
发帖 366
注册 2007-7-25
状态 离线
『第 3 楼』:  

可以用"^"进行转义。

2008-5-24 15:27
查看资料  发短消息 网志   编辑帖子  回复  引用回复
tadonis
初级用户





积分 38
发帖 10
注册 2008-5-20
状态 离线
『第 4 楼』:  

谢谢啦
明白了
我在echo %1*%2=%aa%>>jieguo.txt
的%a%后面加了个空格就解决了



ping mm
来自mm的回复:我喜欢你
2008-5-26 17:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: