中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
作者:
标题: 请教批处理中的递归问题 上一主题 | 下一主题
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『楼 主』:  请教批处理中的递归问题

我用的系统是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
不知道哪里错了
请各位大侠帮忙


2005-6-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
willsort
元老会员

Batchinger


积分 4432
发帖 1512
注册 2002-10-18
状态 离线
『第 2 楼』:  

Re smileseeker:
  在NT系列命令行中,重定向符号前加数字,将会表示重定向的设备的句柄,所以只要在%a%、%b%后加一个空格即可。

  Quote:
默认情况下,可以从键盘将命令输入(即 STDIN 句柄)发送到 Cmd.exe,然后由 Cmd.exe 将命令输出(即 STDOUT 句柄)发送到命令提示符窗口。
下表将列出可用的句柄。
句柄 句柄的数字代号 说明
STDIN 0 键盘输入
STDOUT 1 输出到命令提示符窗口
STDERR 2 错误输出到命令提示符窗口
UNDEFINED 3-9 这些句柄由应用程序和各个具体工具单独定义
数字 0 到 9 代表前 10 个句柄。可以使用命令 Cmd.exe 运行程序并将前 10 个句柄中的任何一个重定向到该程序。要指定想使用的句柄,可在重定向操作符前面键入该句柄的数字。如果未定义句柄,则默认的 < 重定向输入操作符是 0,而默认的 > 重定向输出操作符是 1。键入 > 或 < 操作符之后,必须指定要读取或写入数据的位置。可以指定文件名或另一个现有的句柄。

[此贴子已经被作者于2005-6-3 16:59:24编辑过]






※ Batchinger 致 Bat Fans:请访问 [讨论]批处理编程的异类 ,欢迎交流与共享批处理编程心得!
2005-6-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
smileseeker
中级用户




积分 316
发帖 83
注册 2005-3-1
状态 离线
『第 3 楼』:  

高手就是高手看的头晕不过还好,知道在后面加个空格就好了谢谢哈

2005-6-3 00:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: