|
PPdos
高级用户
积分 783
发帖 268
注册 2006-12-26
状态 离线
|
『第
16 楼』:
Quote: | Originally posted by qzwqzw at 2008-6-25 02:09 PM:
大家说了半天
都没觉得是在围着一个很不典型的例子在讨论问题吗?
难道没人知道set /a是缺省具有延迟效果的吗?
楼主的那个例子完全用不着变 ... |
|
如果缩成一行写呢?
|
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃. |
|
2008-6-25 21:15 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
17 楼』:
很无味的想法
代码追求简洁明快
而非简短古怪
|
|
2008-6-25 21:20 |
|
|
metoo
初级用户
积分 195
发帖 93
注册 2006-10-28
状态 离线
|
『第
18 楼』:
Quote: | Originally posted by qzwqzw at 2008-6-25 09:09 PM:
大家说了半天
都没觉得是在围着一个很不典型的例子在讨论问题吗?
难道没人知道set /a是缺省具有延迟效果的吗?
楼主的那个例子完全用不着变 ... |
|
兄貌似对什么叫延迟变量了解不够透彻,同样是for循环结束后变量自然是生效的
应用上面的一个例子不用set/a
@echo off
for /f %%a in ('dir/b') do (
set ww=%%a
)
echo %ww%
pause 可以看到最后变量%ww%是会被赋予最后的值的
|
|
2008-6-25 21:20 |
|
|
PPdos
高级用户
积分 783
发帖 268
注册 2006-12-26
状态 离线
|
『第
19 楼』:
那无奈何老大的签名岂不是让你说的一文不值拉。。。。
[ Last edited by PPdos on 2008-6-25 at 02:32 PM ]
|
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃. |
|
2008-6-25 21:30 |
|
|
metoo
初级用户
积分 195
发帖 93
注册 2006-10-28
状态 离线
|
『第
20 楼』:
Quote: | Originally posted by qzwqzw at 2008-6-25 09:15 PM:
metoo老兄9楼的言论有欠思量啊
在没有变量延迟的dos时代
也是可以“连续赋值/中间环节直接获取”的
这只需要对被call的:num_add一节做些小小的改 ... |
|
确实。。是可以用这个格式。。
某些代码我也欠考虑了,很高兴这论坛能有这样的气氛^ ^
|
|
2008-6-25 21:30 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
21 楼』:
metoo老兄可能是引用错了吧
我是在15楼反驳你的言论的
13楼的说法我是在证明楼主代码的多余
貌似没有什么问题
首先变量延迟我是了解的
“延迟变量”倒是第一次看见
兄在18楼的例子想说明什么问题?
任何变量在被“连续赋值”后自然都应该是最后的生效啊?
这没有什么值得讨论的啊
[ Last edited by qzwqzw on 2008-6-25 at 11:11 PM ]
|
|
2008-6-25 21:31 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
22 楼』:
无奈何的签名其里重于其表
其中透出的无奈与豁达
我是很欣赏的
如果没有点睛的那几句释名辞
我只会视作过眼云烟
可很多人都被那古怪的结构
和willsort的一篇释义帖
搞得在技术的迷宫里迷失了方向
反而失去了最应该值得珍视的内在
不要觉得在讨论技术的地方
就应该钻技术的牛角尖
毕竟技术的讨论和发展是不断推陈出新的
而心灵的感觉和人生的体验却往往是弥足珍贵的
|
|
2008-6-25 21:45 |
|
|
metoo
初级用户
积分 195
发帖 93
注册 2006-10-28
状态 离线
|
『第
23 楼』:
其实楼主的言论是对的- -!
然后ppdos兄的简化其实是错误的,并不能代替延迟变量,而是简单的连续赋值后的最后产物,然后我就他那个作了些解释 - -!
其实
变量延迟/延迟变量 不管叫啥吧(当然99%是我叫错了。。死鸭子也得嘴硬一下)
他存在的目的就是得到for循环内的set获得的变量变化的各个步骤然后加以处理,
当在for 应用中使用set的话是必须 变量延迟/延迟变量 的 而用call是将set至于循环命令的外圈执行,是一个不断调用子过程来达到类似 变量延迟/延迟变量 的效果
还有 无奈何的 那个签名并不是 连续赋值 注意 set/p 这个参数是个交互命令,这个地方可能是这个签名最精髓的地方
[ Last edited by metoo on 2008-6-25 at 09:56 PM ]
|
|
2008-6-25 21:54 |
|
|
PPdos
高级用户
积分 783
发帖 268
注册 2006-12-26
状态 离线
|
『第
24 楼』:
大家都没说楼主说的错啊~~?
我只是觉得楼主 写的长了点给简化一下
是否错误 那还是仁者见仁
|
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃. |
|
2008-6-25 21:58 |
|
|
wxcute
中级用户
积分 458
发帖 211
注册 2006-7-26
状态 离线
|
『第
25 楼』:
没想到这么多人讨论。
就像第1页15楼qzwqzw说的,改成这样就能显示中间的了。
还有metoo也挺搞笑“嘴硬的死鸭子”
@echo off
for /f %%a in ('dir/b') do call :num_add file_num
echo 目录下有%file_num%个文件(夹)。
pause
goto :eof
:num_add
set/a %1+=1
::加了下一行
echo %file_num%
goto :eof [ Last edited by wxcute on 2008-6-25 at 10:25 PM ]
|
┌───────┐
├→学习→实践→┤
└───────┘ |
|
2008-6-25 22:16 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
26 楼』:
首先,楼主的言论肯定是对的
计算当然可以不用变量延迟(即使是在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 ]
|
|
2008-6-25 22:21 |
|
|
metoo
初级用户
积分 195
发帖 93
注册 2006-10-28
状态 离线
|
『第
27 楼』:
作者的方法是对的。。但是那个简化版的是作不到代替延迟变量的。。这点错误我已经意识到了。。话说无奈何斑竹那个是特殊情况,不是连续赋予值。。用的set/p的交互方式。。。那个call也不是这种用法。。仿冒他的签名写了个p版的
@echo off
set tt=一二三四五,上山打老虎,老虎不在家,回家吃番薯。 ——metoo冒牌版
for /l %%i in (0,1,36)do (
call call set/p= %%%%tt:~%%i,1%%%%<nul&ping/n 1 127.1>nul
) 按照楼上说法那我这个call call 是何种解释呢?
[ Last edited by metoo on 2008-6-25 at 10:40 PM ]
|
|
2008-6-25 22:27 |
|
|
wxcute
中级用户
积分 458
发帖 211
注册 2006-7-26
状态 离线
|
『第
28 楼』:
其实我也菜鸟一个,没想得那么深。
只是习惯了用%,要用!代替%有点不适应,还有就是写“setlocal enableDelayedExpansion”挺费事的。我记性不好,记了有段时间才记住。
|
┌───────┐
├→学习→实践→┤
└───────┘ |
|
2008-6-25 22:30 |
|
|
metoo
初级用户
积分 195
发帖 93
注册 2006-10-28
状态 离线
|
『第
29 楼』:
Quote: | Originally posted by wxcute at 2008-6-25 10:30 PM:
其实我也菜鸟一个,没想得那么深。
只是习惯了用%,要用!代替%有点不适应,还有就是写“setlocal enableDelayedExpansion”挺费事的。我记性不好,记了有段时间才记住。 |
|
鄙人也是菜鸟一个,话说其实这东西我现在都记不住。。我在editplus里设置了一个快捷输入!
|
|
2008-6-25 22:33 |
|
|
qzwqzw
银牌会员
天的白色影子
积分 2342
发帖 635
注册 2004-3-6
状态 离线
|
『第
30 楼』:
人一多就显得有些乱了
再加上有几位喜欢编辑帖子的
看着看着就觉得思路连不上了
现在理顺一下
ppdos开始只是想简化楼主的代码
后来提出无奈何签名是反驳我“简短古怪不可取”的言论
metoo是想说明变量延迟的“连续赋值”意义并以此证明其不可替代
后来提到无奈何的签名没有用变量延迟是因为没有用“连续赋值”
我刚开始只是想说楼主的代码证明不了楼主的观点
现在我想延伸楼主的观点——
for+call可以替代for+延迟,无论何种情况下
欢迎大家举出例子反驳我的观点
顺便也是对自己编程思想和代码技巧的一次整理
|
|
2008-6-25 22:38 |
|