中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-10-01 05:58
共 47,813 主题排行 / 349,918 发帖 / 今日 0 篇 / 48,279 会员排行
DOS批处理 & 脚本技术(批处理室) » 不用变量延迟[setlocal enableDelayedExpansion]也可以计算
可打印版本  5,407 / 49
第16楼 PPdos 发表于 2008-06-25 21:15
高级用户 发帖 268 积分 783
Originally posted by qzwqzw at 2008-6-25 02:09 PM:
大家说了半天
都没觉得是在围着一个很不典型的例子在讨论问题吗?
难道没人知道set /a是缺省具有延迟效果的吗?

楼主的那个例子完全用不着变 ...


如果缩成一行写呢?
第17楼 qzwqzw 发表于 2008-06-25 21:20
银牌会员 发帖 636 积分 2,343
很无味的想法
代码追求简洁明快
而非简短古怪
第18楼 metoo 发表于 2008-06-25 21:20
初级用户 发帖 93 积分 195
Originally posted by qzwqzw at 2008-6-25 09:09 PM:
大家说了半天
都没觉得是在围着一个很不典型的例子在讨论问题吗?
难道没人知道set /a是缺省具有延迟效果的吗?

楼主的那个例子完全用不着变 ...

兄貌似对什么叫延迟变量了解不够透彻,同样是for循环结束后变量自然是生效的
应用上面的一个例子不用set/a

可以看到最后变量%ww%是会被赋予最后的值的
第19楼 PPdos 发表于 2008-06-25 21:30
高级用户 发帖 268 积分 783
很无味的想法
代码追求简洁明快
而非简短古怪


那无奈何老大的签名岂不是让你说的一文不值拉。。。。

[ Last edited by PPdos on 2008-6-25 at 02:32 PM ]
第20楼 metoo 发表于 2008-06-25 21:30
初级用户 发帖 93 积分 195
Originally posted by qzwqzw at 2008-6-25 09:15 PM:
metoo老兄9楼的言论有欠思量啊

在没有变量延迟的dos时代
也是可以“连续赋值/中间环节直接获取”的

这只需要对被call的:num_add一节做些小小的改 ...

确实。。是可以用这个格式。。
某些代码我也欠考虑了,很高兴这论坛能有这样的气氛^ ^
第21楼 qzwqzw 发表于 2008-06-25 21:31
银牌会员 发帖 636 积分 2,343
metoo老兄可能是引用错了吧
我是在15楼反驳你的言论的

13楼的说法我是在证明楼主代码的多余
貌似没有什么问题

首先变量延迟我是了解的
“延迟变量”倒是第一次看见

兄在18楼的例子想说明什么问题?

任何变量在被“连续赋值”后自然都应该是最后的生效啊?
这没有什么值得讨论的啊

[ Last edited by qzwqzw on 2008-6-25 at 11:11 PM ]
第22楼 qzwqzw 发表于 2008-06-25 21:45
银牌会员 发帖 636 积分 2,343
无奈何的签名其里重于其表
其中透出的无奈与豁达
我是很欣赏的
如果没有点睛的那几句释名辞
我只会视作过眼云烟

可很多人都被那古怪的结构
和willsort的一篇释义帖
搞得在技术的迷宫里迷失了方向
反而失去了最应该值得珍视的内在

不要觉得在讨论技术的地方
就应该钻技术的牛角尖
毕竟技术的讨论和发展是不断推陈出新的
而心灵的感觉和人生的体验却往往是弥足珍贵的
第23楼 metoo 发表于 2008-06-25 21:54
初级用户 发帖 93 积分 195
其实楼主的言论是对的- -!
然后ppdos兄的简化其实是错误的,并不能代替延迟变量,而是简单的连续赋值后的最后产物,然后我就他那个作了些解释 - -!

其实
变量延迟/延迟变量 不管叫啥吧(当然99%是我叫错了。。死鸭子也得嘴硬一下)
他存在的目的就是得到for循环内的set获得的变量变化的各个步骤然后加以处理,
当在for 应用中使用set的话是必须 变量延迟/延迟变量 的 而用call是将set至于循环命令的外圈执行,是一个不断调用子过程来达到类似 变量延迟/延迟变量 的效果

还有 无奈何的 那个签名并不是 连续赋值 注意 set/p 这个参数是个交互命令,这个地方可能是这个签名最精髓的地方

[ Last edited by metoo on 2008-6-25 at 09:56 PM ]
第24楼 PPdos 发表于 2008-06-25 21:58
高级用户 发帖 268 积分 783
大家都没说楼主说的错啊~~?

我只是觉得楼主 写的长了点给简化一下

是否错误 那还是仁者见仁
第25楼 wxcute 发表于 2008-06-25 22:16
中级用户 发帖 211 积分 458
没想到这么多人讨论。

就像第1页15楼qzwqzw说的,改成这样就能显示中间的了。

还有metoo也挺搞笑“嘴硬的死鸭子”



[ Last edited by wxcute on 2008-6-25 at 10:25 PM ]
第26楼 qzwqzw 发表于 2008-06-25 22:21
银牌会员 发帖 636 积分 2,343
首先,楼主的言论肯定是对的
计算当然可以不用变量延迟(即使是在for中计算)
当然,这里的“计算”说得很模糊
导致各人有各人的理解
楼主这里的潜台词是可以用call来代替延迟
因为他的代码中出现了call

其次,楼主的代码也是没有问题的
语法正确无误且能达到想要的效果

我想表明的是
楼主的代码证明不了楼主观点中的潜台词
因为我用非call且非延迟的方式也能实现同样的目的
那就无法结实call可以代替延迟的意义
--------------------------------------------------------

从ppdos的第一回帖来看
是了解我在14楼提到的set /a的缺省延迟效果的
只不过没把它当成一个问题与楼主的言论联系起来而已

简化本身没有问题
我也只是认为缩成一行代码略显多余

也能从中找到证明call能代替延迟的观点的佐证

(for /f %i in ('dir /b') do set /a n+=1 >nul)&call echo 目录下有%n%个文件(夹)
可以代替
(for /f %i in ('dir /b') do set /a n+=1 >nul)&echo 目录下有!n!个文件(夹)

这说明连接语句中遇到变量延迟问题可以用call替换
而metoo却往for里面去看
当然是看不到什么有价值的东西的
--------------------------------------------------------

至于无奈何的签名
那真是又扯远了
我现在只记得那几句词
代码早忘得个干净
也不耐再去翻腾出来
且管它是不是连续赋值

[ Last edited by qzwqzw on 2008-6-25 at 10:28 PM ]
第27楼 metoo 发表于 2008-06-25 22:27
初级用户 发帖 93 积分 195
作者的方法是对的。。但是那个简化版的是作不到代替延迟变量的。。这点错误我已经意识到了。。话说无奈何斑竹那个是特殊情况,不是连续赋予值。。用的set/p的交互方式。。。那个call也不是这种用法。。仿冒他的签名写了个p版的


按照楼上说法那我这个call call 是何种解释呢?

[ Last edited by metoo on 2008-6-25 at 10:40 PM ]
第28楼 wxcute 发表于 2008-06-25 22:30
中级用户 发帖 211 积分 458
其实我也菜鸟一个,没想得那么深。

只是习惯了用%,要用!代替%有点不适应,还有就是写“setlocal enableDelayedExpansion”挺费事的。我记性不好,记了有段时间才记住。
第29楼 metoo 发表于 2008-06-25 22:33
初级用户 发帖 93 积分 195
Originally posted by wxcute at 2008-6-25 10:30 PM:
其实我也菜鸟一个,没想得那么深。

只是习惯了用%,要用!代替%有点不适应,还有就是写“setlocal enableDelayedExpansion”挺费事的。我记性不好,记了有段时间才记住。

鄙人也是菜鸟一个,话说其实这东西我现在都记不住。。我在editplus里设置了一个快捷输入!
第30楼 qzwqzw 发表于 2008-06-25 22:38
银牌会员 发帖 636 积分 2,343
人一多就显得有些乱了
再加上有几位喜欢编辑帖子的
看着看着就觉得思路连不上了

现在理顺一下
ppdos开始只是想简化楼主的代码
后来提出无奈何签名是反驳我“简短古怪不可取”的言论

metoo是想说明变量延迟的“连续赋值”意义并以此证明其不可替代
后来提到无奈何的签名没有用变量延迟是因为没有用“连续赋值”

我刚开始只是想说楼主的代码证明不了楼主的观点
现在我想延伸楼主的观点——

for+call可以替代for+延迟,无论何种情况下

欢迎大家举出例子反驳我的观点
顺便也是对自己编程思想和代码技巧的一次整理
上一页  1 2 3 4  下一页
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023