中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
作者:
标题: set /a 取余(%)??? 上一主题 | 下一主题
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『楼 主』:  set /a 取余(%)???

set syear=2008 set /a yyyy=syear%4 echo %yyyy% 以上直接在CMD下执行,OK!得到yyyy为0 但是,如果写在test.bat中,再执行test.bat却不行!!!
@echo off set syear=2008 set /a yyyy=syear%4
得到的yyyy为2008 ??????? [ Last edited by xycoordinate on 2007-2-16 at 03:01 PM ]


2007-2-17 03:49
查看资料  发送邮件  发短消息  网志  OICQ (226308607)  编辑帖子  回复  引用回复
qjbm
初级用户





积分 125
发帖 44
注册 2007-1-24
状态 离线
『第 2 楼』:  

@echo off set syear=2008 set /a yyyy=syear%%4


2007-2-17 11:01
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
6622186
高级用户





积分 894
发帖 411
注册 2007-2-17
状态 离线
『第 3 楼』:  关于删除自身

删除.bat 文件自身可以用 del %0 , 在命令行下运行可以, 但是双击该文件无效, 只能用 del filename.bat 才可以, 请问这是为什么?


2007-2-17 12:59
查看资料  发短消息  网志   编辑帖子  回复  引用回复
spiegboy
初级用户





积分 24
发帖 9
注册 2007-2-9
状态 离线
『第 4 楼』:  

不是把,我试验过的,在批文件中写入del %0 就可以删除文件本身,你再试试吧


2007-2-17 14:26
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
PPdos
高级用户




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

del %~s0




菩提本无树,明镜亦非台,本来无一物,何处惹尘埃.
2007-2-17 17:34
查看资料  发短消息  网志   编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 6 楼』:  

谢谢!!! 厉害呀! set 取余和for 中%i是不是一个道理! 放入批处理中都要变成%% ???


2007-2-17 21:11
查看资料  发送邮件  发短消息  网志  OICQ (226308607)  编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 7 楼』:  

再问一下: @echo off set syear=2008 if %smouth% == 2 ( set /a yyyy=syear%%4 if %yyyy% == 0 ( set lday=29 ) else ( set ldate =28 ) ) echo %lday% 应该是29呀??? 为什么显示28??? 如果改写成
@echo off set syear=2008 set /a yyyy=syear%%4 if %smouth% == 2 ( if %yyyy% == 0 ( set lday=29 ) else ( set ldate =28 ) ) echo %lday%
就OK!!! 为什么 set /a yyyy=syear%%4放在if里就不行呢??? [ Last edited by xycoordinate on 2007-2-17 at 09:28 PM ]


2007-2-17 21:29
查看资料  发送邮件  发短消息  网志  OICQ (226308607)  编辑帖子  回复  引用回复
gne3
高级用户

DOS学徒


积分 526
发帖 252
注册 2007-2-12
状态 离线
『第 8 楼』:  

ding


2007-2-17 21:52
查看资料  发短消息  网志   编辑帖子  回复  引用回复
3742668
荣誉版主





积分 2013
发帖 718
注册 2006-2-18
状态 离线
『第 9 楼』:  

Originally posted by xycoordinate at 2007-2-17 21:29: 再问一下: @echo off set syear=2008 if %smouth% == 2 ( set yyyy=syear%%4 if %yyyy% == 0 ( set lday=29 ) else ( set ldate =28 ) ) echo %lday% 应该是29呀?? ...
因为if语句实际上都在一行上,只不过你的写法上把它分为了几行。 在同一行上的多次对变量的操作存在一个变量延迟的问题,比如: set str=cn-dos.net && echo %str% 就只会在屏幕上打印%str%而不是cn-dos.net,你的代码中应该就是与此类似的情况。 建议可以先用setlocal ENABLEDELAYEDEXPANSION启用延迟的环境变量,然后在if语句中用!!来代替%%试试。


2007-2-18 07:24
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
xycoordinate
中级用户




积分 493
发帖 228
注册 2007-2-16
来自 安徽
状态 离线
『第 10 楼』:  

建议可以先用setlocal ENABLEDELAYEDEXPANSION启用延迟的环境变量,然后在if语句中用!!来代替%%试试
这个我要好好学学!没有听过! 谢谢! test.bat
@echo off set syear=2008 set smouth=2 if %smouth% == 2 ( set /a yyyy=syear%%4 if %yyyy% == 0 (set lday=29) else (set ldate =28) ) echo %lday%
CMD: \>test.bat 此时不应有 (set。 ?????? [ Last edited by xycoordinate on 2007-2-17 at 09:28 PM ]


2007-2-18 09:27
查看资料  发送邮件  发短消息  网志  OICQ (226308607)  编辑帖子  回复  引用回复

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


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



论坛跳转: