中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 关于FOR /L 的一个问题,请高手指点!
作者:
标题: 关于FOR /L 的一个问题,请高手指点! 上一主题 | 下一主题
sy790825
新手上路





积分 11
发帖 5
注册 2007-5-16
状态 离线
『楼 主』:  关于FOR /L 的一个问题,请高手指点!

批处理文件内容 for /L %%a in (1,1,254) do call ping.bat %%a 目的:想写个打开254个窗口,执行ping.bat,用变量%%a,作为ping.bat的参数,问题是现在只执行第一个%%a,就是1,而不会递增到255,是不是for /L,不支持call bat文件?用for / f 就没有问题! 还有个问题:命令ping 192.168.0.1 | findstr "Relpy" >nul ,在dos下直接执行正常,如果写在批处理下,就会显示成ping 192.168.1.1 | findstr "Reply" 1>nul ,请教多出来的1是怎么回事,请高手指点,先谢谢啦!!


2008-1-12 12:32
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ywjco
初级用户





积分 31
发帖 17
注册 2007-10-31
状态 离线
『第 2 楼』:  

第一个: for /L %%a in (1,1,254) do call ping.bat %%a要想在循环中引用变量, 需要使用变量廷迟扩展: *************************** @echo off setlocal EnableDelayedExpansion set /a n=0 for /L %%a in (1,1,254) do ( set /a n=%%a ::echo !n! in Main_bat call ping.bat !n! ) pause ********************************* 第二个: 1>nul中的1是STDOU, 即XP CMD的命令行窗口. 是因为你在BAT中使用了重定向(即把标准输出重定向到nul设备中),用@echo off 可关闭其显示, 并不影响BAT的执行. 以上在XP SP2 CMD下测试.:P [ Last edited by ywjco on 2008-1-12 at 11:11 PM ]


2008-1-12 23:07
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




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

把“call”改成“start”。


2008-1-13 00:34
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
dby55
初级用户





积分 98
发帖 49
注册 2007-5-1
状态 离线
『第 4 楼』:  

又学到知识了


2008-1-13 06:55
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
sy790825
新手上路





积分 11
发帖 5
注册 2007-5-16
状态 离线
『第 5 楼』:  感谢各位英雄指点,呵呵!

3楼的start曾经试过,结果弹出无数窗口,直接死机?不知为何,call也是,即使只循环2次也是,,有谁知道原因? 2楼的感觉正解,不过请教一下,为何需添加变量N,延时我理解,直接%%a,不可以么?比如我直接each %%a显示的不是从1-255,为什么要set N,还有STDOU,是什么意思,可以解释一下么,非常感谢!


2008-1-13 18:54
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ywjco
初级用户





积分 31
发帖 17
注册 2007-10-31
状态 离线
『第 6 楼』:  

TO:第 3 楼 版主lxmxn这次是失手了。 MS的参考: Start启动单独的“命令提示符”窗口来运行指定程序或命令。如果在没有参数的情况下使用,start 将打开第二个命令提示符窗口。 加上参数/b :启动应用程序时不必打开新的“命令提示符”窗口。 我是死机了一次再来查看的,大意了。 ******************************** TO :第 5 楼 有关重定向的问题请查阅MS的帮助: 开始--->运行-->输入: hh ntcmds.chm::/redirection.htm 使用命令重定向操作符 我贴出部分: 默认情况下,可以从键盘将命令输入(即 STDIN 句柄)发送到 Cmd.exe,然后由 Cmd.exe 将命令输出(即 STDOUT 句柄)发送到命令提示符窗口。 下表将列出可用的句柄。 句柄 句柄的数字代号 说明 STDIN 0 键盘输入 STDOUT 1 输出到命令提示符窗口 STDERR 2 错误输出到命令提示符窗口 UNDEFINED 3-9 这些句柄由应用程序和各个具体工具单独定义。 默认的 > 重定向输出操作符是 1 有关使用变量N,请参考论坛中的教程: bbs.verybat.cn/viewt ... 批处理基础系列第八集 主 题:延迟环境变量扩展 [ Last edited by ywjco on 2008-1-14 at 10:27 PM ]


2008-1-14 20:49
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xhm
新手上路





积分 6
发帖 2
注册 2008-1-16
状态 离线
『第 7 楼』:  

学到东西了


2008-1-16 23:09
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




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

你觉得启用变量延迟有用么?这里根本就是多余的操作。 我说把“call”改称“start”可能说简单了,但是还是用“start”的方法来就可以了。 试试这个:
for /L %%a in (1,1,255) do start cmd /c ping.bat %%a
另外,建议楼主不要把批处理脚本的名字写成系统已有命令的名字,比如这里的“ping.bat”就不合适,避免造成不必要的麻烦。


2008-1-16 23:38
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
sy790825
新手上路





积分 11
发帖 5
注册 2007-5-16
状态 离线
『第 9 楼』:  

呵呵,受教了,感谢lxmxn与ywjco耐心指点!解决我想了很久的问题,thank you very mach!!!


2008-1-17 13:35
查看资料  发短消息  网志   编辑帖子  回复  引用回复
ywjco
初级用户





积分 31
发帖 17
注册 2007-10-31
状态 离线
『第 10 楼』:  

TO:lxmxn版主 大量使用start cmd /c这样调用子批处理会导致额外的系统开销,虽然用cmd /c参数会每次自行结束CMD窗口,但调用时系统硬盘还是狂跑一轮;相比之下,使用用“廷迟变量扩展”调用子批处理,就可以完全解决此问题。其好处是,每次均在本批处理中调用ping.bat,没有额外的CMD窗口内存开销。 若要查看这两者的差别,只要在执行这两个批处理之前,用Ctrl-Alt-Del 开启任务管理器,然后将for /L %%a in (1,1,255)中的255改为512或更大时,分别进行测试,就清楚了。 仅作学习讨论。


2008-1-17 20:22
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
lxmxn
版主




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

目的:想写个打开254个窗口
这里我并不是讨论效率的问题,而是讨论怎么达到楼主说的这个效果。


2008-1-17 22:48
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xjhdos
初级用户





积分 46
发帖 24
注册 2008-4-10
来自 湖北
状态 离线
『第 12 楼』:  

<font color=#FF0CF9>郁</font><font color=#FF18F3>闷</font><font color=#FF24ED>啊</font>     <font color=#FF6DC9>怎</font><font color=#FF79C3>么</font><font color=#FF86BC>弄</font><font color=#FF92B6>的</font><font color=#FF9EB0>呀</font>   <font color=#FFCE98>不</font><font color=#FFDB92>是</font><font color=#FFE78C>太</font><font color=#FFF386>会</font><font color=#FFFF80>呀</font>


2008-4-11 05:47
查看资料  发送邮件  发短消息  网志  OICQ (724510024)  编辑帖子  回复  引用回复
11440
新手上路





积分 7
发帖 4
注册 2007-9-22
状态 离线
『第 13 楼』:  

把“call”改成“start”。 版主厉害


2008-4-11 15:09
查看资料  发送邮件  发短消息  网志  OICQ (250915642)  编辑帖子  回复  引用回复
lfopt
初级用户





积分 71
发帖 34
注册 2008-3-12
状态 离线
『第 14 楼』:  

用"start"NB,我喜欢


2008-4-12 20:43
查看资料  发送邮件  发短消息  网志  OICQ (343253490)  编辑帖子  回复  引用回复

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


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



论坛跳转: