中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 不用变量延迟[setlocal enableDelayedExpansion]也可以计算
« [1] [2] [3] [4] »
作者:
标题: 不用变量延迟[setlocal enableDelayedExpansion]也可以计算 上一主题 | 下一主题
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 31 楼』:  



  Quote:
我在editplus里设置了一个快捷输入!

啥都不说了,知音难觅啊

2008-6-25 22:39
查看资料  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 32 楼』:  

几次看见 ping/n 1 127.1, 我知道这个命令的本来意思,但用在类似于这样的代码起到了什么作用,能否给我这个土鸟解释下。

谢谢!



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-6-25 22:42
查看资料  发短消息 网志   编辑帖子  回复  引用回复
metoo
初级用户





积分 195
发帖 93
注册 2006-10-28
状态 离线
『第 33 楼』:  



  Quote:
Originally posted by qzwqzw at 2008-6-25 10:38 PM:
人一多就显得有些乱了
再加上有几位喜欢编辑帖子的
看着看着就觉得思路连不上了

现在理顺一下
ppdos开始只是想简化楼主的代码
后来提出无奈 ...

鄙人的开始观点已经意识到错误了,基本统一楼上观点,
但是我认为ppdos的简写方式是不对的

2008-6-25 22:43
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
metoo
初级用户





积分 195
发帖 93
注册 2006-10-28
状态 离线
『第 34 楼』:  



  Quote:
Originally posted by qzwqzw at 2008-6-25 10:39 PM:

啥都不说了,知音难觅啊

哈哈,知音难觅,居然还有同好的

2008-6-25 22:44
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
metoo
初级用户





积分 195
发帖 93
注册 2006-10-28
状态 离线
『第 35 楼』:  



  Quote:
Originally posted by quya at 2008-6-25 10:42 PM:
几次看见 ping/n 1 127.1, 我知道这个命令的本来意思,但用在类似于这样的代码起到了什么作用,能否给我这个土鸟解释下。

谢谢!

搜索论坛关于批处理运行时间延迟方面的帖子

2008-6-25 22:47
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
PPdos
高级用户




积分 783
发帖 268
注册 2006-12-26
状态 离线
『第 36 楼』:  

关于缩成一行的代码 个人而言

是为了能更方便的在dos命令行中直接测试

个人觉得很有必要 测试程序并非多余

(只是我手懒 能一行写出来的都不想建个批文件)



菩提本无树,明镜亦非台,本来无一物,何处惹尘埃.
2008-6-25 22:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
HAT
版主





积分 9023
发帖 5017
注册 2007-5-31
状态 离线
『第 37 楼』:  



  Quote:
Originally posted by quya at 2008-6-25 10:42 PM:
几次看见 ping/n 1 127.1, 我知道这个命令的本来意思,但用在类似于这样的代码起到了什么作用,能否给我这个土鸟解释下。

谢谢!

仔细阅读这个帖子
http://www.cn-dos.net/forum/viewthread.php?tid=8905#pid54227



2008-6-25 22:51
查看资料  发短消息 网志   编辑帖子  回复  引用回复
wxcute
中级用户





积分 458
发帖 211
注册 2006-7-26
状态 离线
『第 38 楼』:  

刚才居然中毒了,不知道是哪个可恶的家伙。很郁闷阿。

另editplus好用吗?原来有这样的好东东。用notepad习惯了,可是累阿,要改改。下载个先。



┌───────┐
├→学习→实践→┤
└───────┘
2008-6-25 23:19
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
quya
高级用户

五星老土


积分 558
发帖 172
注册 2003-2-9
来自 江苏
状态 离线
『第 39 楼』:  



  Quote:
Originally posted by wxcute at 2008-6-25 11:19 PM:
刚才居然中毒了,不知道是哪个可恶的家伙。很郁闷阿。

另editplus好用吗?原来有这样的好东东。用notepad习惯了,可是累阿,要改改。下载个先。

大家以后中毒并且杀毒软件杀不了的话,可以找我。

我老土批处理虽然不行,可是手工杀毒的本事那是天下无双啊。



我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
2008-6-26 10:11
查看资料  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 40 楼』:  

缩成一行在命令行中直接测试而不显示set/a部分:
echo off&(for /f %i in ('dir /b') do set /a n+=1 >nul)&call echo 目录下有%n%个文件(夹)&echo on


   此帖被 +8 点积分        点击查看详情   
评分人:【 PPdos 分数: +8  时间:2008-6-27 01:44




2008-6-26 10:35
查看资料  发短消息 网志   编辑帖子  回复  引用回复
hjkk123
初级用户





积分 160
发帖 82
注册 2007-5-14
状态 离线
『第 41 楼』:  

学习了

2008-6-26 10:55
查看资料  发短消息 网志   编辑帖子  回复  引用回复
qzwqzw
银牌会员

天的白色影子


积分 2342
发帖 635
注册 2004-3-6
状态 离线
『第 42 楼』:  

看来大家都缺乏彻底的实践精神啊!

讨论了这半天
只有经过了测试才发现ppdos以及zh159精简代码的大问题
因为他们所有的代码都经不起多次运行的考验

第一次运行结果都是对的
比如是7
但第二次运行结果却出错
本来应该是14,结果却仍然是7
第三次仍然错了,本来是21,结果却是14

也就是说在没有设置setlocal的变量环境下
环境变量是会随着运行次数递增的
但是call echo出来的却总是for执行之前的结果
除非call echo的变量此句代码运行前是空

最后的到的结论是
在连接语句中是无法完全用 call echo %var% 代替 echo !var! 的

所以我在26楼中间那段中所表明的最后论点是错的

当然这并不影响我在30楼提到的观点
for+call是可以完全替代for+延迟

至于40楼的代码除了以上提到的共性问题外
思路上也绕了弯子
想不显示set /a只需要一个@标记就可以了
用不着祭起echo off这把牛刀

(for /f %i in ('dir /b') do @set /a n+=1 >nul)&call echo 目录下有%n%

但是我仍然申明
这种缩写很没有意思
先执行for再执行echo %n%
既简单又清晰
还不会出现我所说的上述问题

何苦来哉!

   此帖被 +15 点积分         点击查看详情   
评分人:【 plp626 分数: +15  时间:2008-6-27 23:59


2008-6-26 13:58
查看资料  发短消息 网志   编辑帖子  回复  引用回复
metoo
初级用户





积分 195
发帖 93
注册 2006-10-28
状态 离线
『第 43 楼』:  



  Quote:
Originally posted by qzwqzw at 2008-6-26 01:58 PM:
看来大家都缺乏彻底的实践精神啊!

讨论了这半天
只有经过了测试才发现ppdos以及zh159精简代码的大问题
因为他们所有的代码都经不起多次运行的 ...

对头,精简代码是错误的,仅仅相当于一个for完成后再echo一下
而楼主的代码确实可以带替延迟变量
可以看下我的27楼回复的代码,那个call和楼主的 call完全是两种不同的用法

2008-6-26 15:21
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zh159
金牌会员




积分 3687
发帖 1467
注册 2005-8-8
状态 离线
『第 44 楼』:  

确实忘了在set/a前使用@

1、在命令行里使用,如果你不清空变量,下次的结果肯定会递增,这你不会不知道!
2、在命令行里使用,如果单纯的for后再来一个echo,那是两次输入命令(先输入一次for回车后再输入echo)。

PS:能不用call跳转最好不要用,对效率有一定的影响



2008-6-26 16:17
查看资料  发短消息 网志   编辑帖子  回复  引用回复
plp626
银牌会员

钻石会员


积分 2278
发帖 1020
注册 2007-11-19
状态 离线
『第 45 楼』:  

就一个变量延迟的讨论,竟然这么激烈,我是感觉楼主的代码没什么新鲜之处,我写"子过程"时常用到的.

不过我说个题外话, 楼主举的这个例子不必用for又用set(我喜欢在命令行下用批处理,喜欢信手拈来的感觉)
::文件数
dir/a-d/b|find /c /v ""
::目录数
dir/ad/b|find /c /v ""
::文件与目录数
dir/a-d|findstr/bc:"  "


   此帖被 +4 点积分        点击查看详情   
评分人:【 quya 分数: +4  时间:2008-6-26 19:42




山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
2008-6-26 18:53
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: