中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-28 22:35
中国DOS联盟论坛 » DOS疑难解答 & 问题讨论 (解答室) » 请教批处理中的递归问题 查看 884 回复 2
楼 主 请教批处理中的递归问题 发表于 2005-06-03 00:00 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
21年会员
UID 36626
性别 男
状态 离线
我用的系统是win2000
现有1.bat和2.bat
1.bat的内容为:
del 1.txt
set a=10
set b=1
call 2.bat
echo end>>1.txt
2.bat的内容为:
echo %%%a%%%>>1.txt
set /a a=a-1
if %a% GTR 0 call 2.bat
echo %%%b%%%>>1.txt
set /a b=b+1
执行结果:
%10%
%9%
%8%
%7%
%6%
%5%
%4%
%3%
%2%
%1%
%1%
%2%
%3%
%4%
%5%
%6%
%7%
%8%
%9%
%10%
end
如果将2.bat中的%%%a%%%改为%a%,%%%b%%%改为%b%
结果变成:
10
打开 ECHO。
打开 ECHO。
10
end
黑窗体中:
C:\>del 1.txt
C:\>set a=10
C:\>set b=1
C:\>call 2.bat
C:\>echo 10 1>>1.txt
C:\>set /a a=a-1
C:\>if 9 GTR 0 call 2.bat
C:\>echo 9>>1.txt
打开 ECHO。
C:\>set /a a=a-1
C:\>if 8 GTR 0 call 2.bat
C:\>echo 8>>1.txt
打开 ECHO。
C:\>set /a a=a-1
C:\>if 7 GTR 0 call 2.bat
C:\>echo 7>>1.txt
打开 ECHO。
C:\>set /a a=a-1
C:\>if 6 GTR 0 call 2.bat
C:\>echo 6>>1.txt
打开 ECHO。
C:\>set /a a=a-1
C:\>if 5 GTR 0 call 2.bat
C:\>echo 5>>1.txt
打开 ECHO。
C:\>set /a a=a-1
C:\>if 4 GTR 0 call 2.bat
C:\>echo 4>>1.txt
打开 ECHO。
C:\>set /a a=a-1
C:\>if 3 GTR 0 call 2.bat
C:\>echo 3>>1.txt
打开 ECHO。
C:\>set /a a=a-1
C:\>if 2 GTR 0 call 2.bat
C:\>echo 2>>1.txt
打开 ECHO。
C:\>set /a a=a-1
C:\>if 1 GTR 0 call 2.bat
C:\>echo 1>>1.txt
C:\>set /a a=a-1
C:\>if 0 GTR 0 call 2.bat
C:\>echo 1>>1.txt
C:\>set /a b=b+1
C:\>echo 2>>1.txt
打开 ECHO。
C:\>set /a b=b+1
C:\>echo 3>>1.txt
打开 ECHO。
C:\>set /a b=b+1
C:\>echo 4>>1.txt
打开 ECHO。
C:\>set /a b=b+1
C:\>echo 5>>1.txt
打开 ECHO。
C:\>set /a b=b+1
C:\>echo 6>>1.txt
打开 ECHO。
C:\>set /a b=b+1
C:\>echo 7>>1.txt
打开 ECHO。
C:\>set /a b=b+1
C:\>echo 8>>1.txt
打开 ECHO。
C:\>set /a b=b+1
C:\>echo 9>>1.txt
打开 ECHO。
C:\>set /a b=b+1
C:\>echo 10 1>>1.txt
C:\>set /a b=b+1
C:\>echo end 1>>1.txt
不知道哪里错了
请各位大侠帮忙
2 发表于 2005-06-03 00:00 ·  中国 山西 运城 中移铁通
元老会员
★★★★
Batchinger
积分 4,432
发帖 1,512
注册 2002-10-18 00:00
23年会员
UID 19
性别 男
状态 离线
Re smileseeker:
  在NT系列命令行中,重定向符号前加数字,将会表示重定向的设备的句柄,所以只要在%a%、%b%后加一个空格即可。
默认情况下,可以从键盘将命令输入(即 STDIN 句柄)发送到 Cmd.exe,然后由 Cmd.exe 将命令输出(即 STDOUT 句柄)发送到命令提示符窗口。
下表将列出可用的句柄。
句柄 句柄的数字代号 说明
STDIN 0 键盘输入
STDOUT 1 输出到命令提示符窗口
STDERR 2 错误输出到命令提示符窗口
UNDEFINED 3-9 这些句柄由应用程序和各个具体工具单独定义
数字 0 到 9 代表前 10 个句柄。可以使用命令 Cmd.exe 运行程序并将前 10 个句柄中的任何一个重定向到该程序。要指定想使用的句柄,可在重定向操作符前面键入该句柄的数字。如果未定义句柄,则默认的 < 重定向输入操作符是 0,而默认的 > 重定向输出操作符是 1。键入 > 或 < 操作符之后,必须指定要读取或写入数据的位置。可以指定文件名或另一个现有的句柄。

※ Batchinger 致 Bat Fans:请访问 批处理编程的异类 ,欢迎交流与共享批处理编程心得!
3 发表于 2005-06-03 00:00 ·  中国 福建 三明 电信
中级用户
★★
积分 316
发帖 83
注册 2005-03-01 00:00
21年会员
UID 36626
性别 男
状态 离线
高手就是高手看的头晕不过还好,知道在后面加个空格就好了谢谢哈
论坛跳转: