中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [原创]列表输出文档,一些学习心得
作者:
标题: [原创]列表输出文档,一些学习心得 上一主题 | 下一主题
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『楼 主』:  [原创]列表输出文档,一些学习心得

昨天看贴子有列表输出的,仔细想了下办法,做了个简单工具,在精简过程中发现set /a的一些特性,提出来大家探讨一下

set /a var1=(x...),var2=var1(x...),var3=var2(x...)
计算过程中,不因为一行命令的延缓约束来传送变量
例如以上,var2的计算过程中引用的var1就是前式结果
此例在for中依然有效,但call之后就不行了,不知什么原因
@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION 2>nul 3>nul
set arg=                                                                              1
:cfgf
if "%~1" == "" (set /p df=datafile:) else set df="%1"
set df=%df:"=%&&if not exist "%df%" goto cfgf
cls&echo file "%df%" line:10.
for /f "usebackq delims=" %%i in ("%df%") do set /a vvv+=1,1/(vvv%%10)&&echo %%i||echo.&&goto cfgc
:cfgc
set /p column=column:
set /a 0/column||goto cfgc
for /l %%i in (1,1,%column%) do set /p wcol%%i=col%%i:&&set /a 0/!wcol%%i!||goto cfgc
set /a wcol0=!wcol%column%!
cls&echo FILE:%df%        COLUMN:%column%
for /l %%i in (1,1,%column%) do echo COL%%i WIDTH:!wcol%%i!byte
echo setup ...&pause>nul

cls&for /f "usebackq" %%i in ("%df%") do (
set /a xxx+=1,zzz=xxx%%%column%
call set /a yyy=%%wcol!zzz!%%
set rga=%%i%arg%
call set/p=%%rga:~0,!yyy!%%<nul
set/p= <nul
set /a 1/zzz||echo.
)
echo/&pause


   此帖被 +12 点积分      点击查看详情   
评分人:【 kcdsw 分数: +4  时间:2007-3-25 08:15
评分人:【 lxmxn 分数: +8  时间:2007-3-25 16:14


2007-3-25 05:00
查看资料  发短消息 网志   编辑帖子  回复  引用回复
lxmxn
版主




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


To everest79:

兄的代码有很多亮点,其中巧妙利用了set/a的很多特性,比如set /a 1/zzz||echo.,set的连续赋值(不知道说的对不对),值得好好的学习一下,支持!

今天把分用完了,改天给兄加分。


2007-3-25 07:04
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 3 楼』:  

re lxmxn
  谢谢你的分,嘿嘿,平常在使用set/a时习惯性的都加了引用符号,反而把一些东西错过了,原来set/a连续赋值时各变量按先后顺序是有延缓特性,并且可以很好的工作在for这类命令中,一些简单的计数操作再也不用特意开启延缓了

2007-3-25 08:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
kcdsw
中级用户





积分 404
发帖 179
注册 2006-3-30
状态 离线
『第 4 楼』:  

晕倒啊  这分是俺加上去的  

这个这个连续赋值俺还是没看明白

2007-3-25 08:44
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 5 楼』:  

下边代码就是连续赋值了,同时为a b c
set /a a=1+1,b=a*2,c=b-1


2007-3-25 08:47
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 6 楼』:  

顶上来骗分

2007-3-26 02:19
查看资料  发短消息 网志   编辑帖子  回复  引用回复
stornager
中级用户

scriptlover


积分 328
发帖 131
注册 2007-3-25
状态 离线
『第 7 楼』:  求教

brother  everest79:可否详细解释一下set/a的用法?????????

2007-3-27 06:30
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
lagunazeng
新手上路





积分 12
发帖 5
注册 2006-8-8
状态 离线
『第 8 楼』:  

是啊,set /a到底是用来干什么的?

2007-3-27 07:50
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 9 楼』:  

汗.自己查看啊..help set就可以了.

2007-3-27 09:45
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 10 楼』:  



  Quote:
Originally posted by stornager at 2007-3-26 05:30 PM:
brother  everest79:可否详细解释一下set/a的用法?????????

这个原理什么的讲不通,举个例子吧

set /a A=6-1,B=A*A,C=B-1,D=C/2

这个运算结果A=5 B=25 C=24 D=12,","是表达式分隔符,这条命令可以看作是一个表达式的集合,由结果可以发现不同于大多数命令的两个特点,第一,表达式是按先后次序来分层进行计算的,第二,每个表达式的结果也就是赋值在各个表达式间是可以按先后产生顺序来调用的,这是因为第一个特点产生的延时效果,这种延时效果在for之类命令中有较大的作用

通常我们在判断一个数是否为偶数时采用以下方法

set /a a=8%2  ;求除以2的余数
if %a% equ 0 echo %a%是偶数  ;判断余数是否为零,若是则为偶数

现在直接用set来完成

set /a 1/(8%2) 2>nul ||echo %a%是偶数

这样节省了变量空间,并简化了代码
这种方法在配合前边提到的两个特点,可以将一些工作变得简单起来

2007-3-27 10:14
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 11 楼』:  

set /a 1/(8%2) 2>nul ||echo %a%是偶数
不明白这一句??

变量a从那里来的??

2007-3-27 10:24
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 12 楼』:  

复制来的

2007-3-27 10:26
查看资料  发短消息 网志   编辑帖子  回复  引用回复
flyinspace
银牌会员





积分 1206
发帖 517
注册 2007-3-25
状态 离线
『第 13 楼』:  

这么说吧.
set /a a=8%2  ;求除以2的余数
if %a% equ 0 echo %a%是偶数  ;判断余数是否为零,若是则为偶数
上面这段话很好理解.
我知道什么变量做了一些什么事?

而set /a 1/(8%2) 2>nul ||echo %a%是偶数
而这一句.若是单独用出来.
就会在屏幕上显示%a%

至于你说的复制来的。
我就更加不明白从那里复制来的..

2007-3-27 10:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复
everest79
金牌会员

一叶枝头,万树皆春



积分 2564
发帖 1127
注册 2006-12-25
状态 离线
『第 14 楼』:  

晕呀,那第二个echo %a%是偶数当然是复制第一个了

2007-3-27 23:52
查看资料  发短消息 网志   编辑帖子  回复  引用回复

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


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



论坛跳转: