中国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却不行!!!

  Quote:
@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???

如果改写成

  Quote:
@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 楼』:  



  Quote:
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 楼』:  



  Quote:
建议可以先用setlocal ENABLEDELAYEDEXPANSION启用延迟的环境变量,然后在if语句中用!!来代替%%试试

这个我要好好学学!没有听过!

谢谢!

test.bat

  Quote:
@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)  编辑帖子  回复  引用回复

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


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



论坛跳转: