中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-06-14 19:54
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 不用变量延迟[setlocal enableDelayedExpansion]也可以计算
31 发表于 2008-06-25 22:39 ·  中国 山西 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
我在editplus里设置了一个快捷输入!

啥都不说了,知音难觅啊
32 发表于 2008-06-25 22:42 ·  中国 江苏 苏州 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
UID 881
性别 男
来自 江苏
状态 离线
几次看见 ping/n 1 127.1, 我知道这个命令的本来意思,但用在类似于这样的代码起到了什么作用,能否给我这个土鸟解释下。

谢谢!
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
33 发表于 2008-06-25 22:43 ·  中国 江苏 苏州 电信
初级用户
★★
积分 195
发帖 93
注册 2006-10-28 08:20
UID 68626
性别 男
状态 离线
Originally posted by qzwqzw at 2008-6-25 10:38 PM:
人一多就显得有些乱了
再加上有几位喜欢编辑帖子的
看着看着就觉得思路连不上了

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

鄙人的开始观点已经意识到错误了,基本统一楼上观点,
但是我认为ppdos的简写方式是不对的
34 发表于 2008-06-25 22:44 ·  中国 江苏 苏州 电信
初级用户
★★
积分 195
发帖 93
注册 2006-10-28 08:20
UID 68626
性别 男
状态 离线
Originally posted by qzwqzw at 2008-6-25 10:39 PM:

啥都不说了,知音难觅啊

哈哈,知音难觅,居然还有同好的
35 发表于 2008-06-25 22:47 ·  中国 江苏 苏州 电信
初级用户
★★
积分 195
发帖 93
注册 2006-10-28 08:20
UID 68626
性别 男
状态 离线
Originally posted by quya at 2008-6-25 10:42 PM:
几次看见 ping/n 1 127.1, 我知道这个命令的本来意思,但用在类似于这样的代码起到了什么作用,能否给我这个土鸟解释下。

谢谢!

搜索论坛关于批处理运行时间延迟方面的帖子
36 发表于 2008-06-25 22:51 ·  法国
高级用户
★★
积分 783
发帖 268
注册 2006-12-26 17:18
UID 74627
性别 男
状态 离线
关于缩成一行的代码 个人而言

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

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

(只是我手懒 能一行写出来的都不想建个批文件)
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃.
37 发表于 2008-06-25 22:51 ·  中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
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
38 发表于 2008-06-25 23:19 ·  中国 福建 三明 电信
中级用户
★★
积分 458
发帖 211
注册 2006-07-26 19:42
UID 59307
状态 离线
刚才居然中毒了,不知道是哪个可恶的家伙。很郁闷阿。

另editplus好用吗?原来有这样的好东东。用notepad习惯了,可是累阿,要改改。下载个先。
┌───────┐
├→学习→实践→┤
└───────┘
39 发表于 2008-06-26 10:11 ·  中国 江苏 苏州 常熟市 电信
高级用户
★★
五星老土
积分 558
发帖 172
注册 2003-02-09 00:00
UID 881
性别 男
来自 江苏
状态 离线
Originally posted by wxcute at 2008-6-25 11:19 PM:
刚才居然中毒了,不知道是哪个可恶的家伙。很郁闷阿。

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



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

我老土批处理虽然不行,可是手工杀毒的本事那是天下无双啊。
我怎么找不到一个比我注册日期早的人? 难道我是传说中的超级管理员? 其实我只是个潜水冠军而已.
40 发表于 2008-06-26 10:35 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
缩成一行在命令行中直接测试而不显示set/a部分:
echo off&(for /f %i in ('dir /b') do set /a n+=1 >nul)&call echo 目录下有%n%个文件(夹)&echo on
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
PPdos +8 2008-06-27 01:44
41 发表于 2008-06-26 10:55 ·  中国 广东 深圳 电信
初级用户
★★
积分 160
发帖 82
注册 2007-05-14 14:55
UID 88494
性别 男
状态 离线
学习了
42 发表于 2008-06-26 13:58 ·  中国 江西 南昌 电信
银牌会员
★★★
天的白色影子
积分 2,343
发帖 636
注册 2004-03-06 00:00
UID 19350
性别 男
状态 离线
看来大家都缺乏彻底的实践精神啊!

讨论了这半天
只有经过了测试才发现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%
既简单又清晰
还不会出现我所说的上述问题

何苦来哉!
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
plp626 +15 2008-06-27 23:59
43 发表于 2008-06-26 15:21 ·  中国 江苏 苏州 电信
初级用户
★★
积分 195
发帖 93
注册 2006-10-28 08:20
UID 68626
性别 男
状态 离线
Originally posted by qzwqzw at 2008-6-26 01:58 PM:
看来大家都缺乏彻底的实践精神啊!

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

对头,精简代码是错误的,仅仅相当于一个for完成后再echo一下
而楼主的代码确实可以带替延迟变量
可以看下我的27楼回复的代码,那个call和楼主的 call完全是两种不同的用法
44 发表于 2008-06-26 16:17 ·  中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
确实忘了在set/a前使用@

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

PS:能不用call跳转最好不要用,对效率有一定的影响
45 发表于 2008-06-26 18:53 ·  中国 陕西 西安 电信
银牌会员
★★★★
钻石会员
积分 2,278
发帖 1,020
注册 2007-11-19 13:34
UID 103127
性别 男
状态 离线
就一个变量延迟的讨论,竟然这么激烈,我是感觉楼主的代码没什么新鲜之处,我写"子过程"时常用到的.

不过我说个题外话, 楼主举的这个例子不必用for又用set(我喜欢在命令行下用批处理,喜欢信手拈来的感觉)

::文件数
dir/a-d/b|find /c /v ""
::目录数
dir/ad/b|find /c /v ""
::文件与目录数
dir/a-d|findstr/bc:" "
本帖最近评分记录 (共 1 条) 点击查看详情
评分人分数时间
quya +4 2008-06-26 19:42
山外有山,人外有人;低调做人,努力做事。

进入网盘(各种工具)~~ 空间~~cmd学习
论坛跳转: