中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-08 17:17
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 求助!!想不到的奇异的结果 查看 744 回复 3
楼 主 求助!!想不到的奇异的结果 发表于 2008-05-24 00:05 ·  中国 上海 电信
初级用户
积分 38
发帖 10
注册 2008-05-20 13:47
18年会员
UID 119195
性别 男
状态 离线
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的回复:我喜欢你
2 TO tadonis: 发表于 2008-05-24 14:50 ·  中国 湖北 武汉 联通
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
20年会员
UID 59080
状态 离线
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 保留的特殊的文件句柄的原因。

你可以搜索以前相关的讨论贴来了解文件句柄的含义和用法。
3 发表于 2008-05-24 15:27 ·  中国 福建 厦门 电信
高级用户
★★★
积分 741
发帖 366
注册 2007-07-25 19:11
19年会员
UID 94024
性别 男
状态 离线
可以用"^"进行转义。
4 发表于 2008-05-26 17:50 ·  中国 上海 电信
初级用户
积分 38
发帖 10
注册 2008-05-20 13:47
18年会员
UID 119195
性别 男
状态 离线
谢谢啦
明白了
我在echo %1*%2=%aa%>>jieguo.txt
的%a%后面加了个空格就解决了
ping mm
来自mm的回复:我喜欢你
论坛跳转: