中国DOS联盟

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

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

中国DOS联盟论坛
现在时间是 2026-08-03 09:56
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » set /a 取余(%)??? 查看 989 回复 9
楼 主 set /a 取余(%)??? 发表于 2007-02-17 03:49 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
19年会员
UID 79596
性别 男
来自 安徽
状态 离线
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 ]
2 发表于 2007-02-17 11:01 ·  中国 山东 济南 电信
初级用户
积分 125
发帖 44
注册 2007-01-24 15:31
19年会员
UID 77555
性别 女
状态 离线
@echo off
set syear=2008
set /a yyyy=syear%%4
3 关于删除自身 发表于 2007-02-17 12:59 ·  中国 湖北 潜江 电信
高级用户
★★★
积分 894
发帖 411
注册 2007-02-17 12:15
19年会员
UID 79697
性别 男
状态 离线
删除.bat 文件自身可以用 del %0 , 在命令行下运行可以, 但是双击该文件无效, 只能用 del filename.bat 才可以, 请问这是为什么?
4 发表于 2007-02-17 14:26 ·  中国 黑龙江 绥化 联通
初级用户
积分 24
发帖 9
注册 2007-02-09 23:52
19年会员
UID 79086
性别 男
状态 离线
不是把,我试验过的,在批文件中写入del %0 就可以删除文件本身,你再试试吧
5 发表于 2007-02-17 17:34 ·  美国 弗吉尼亚州 华盛顿县 Microsoft
高级用户
★★
积分 783
发帖 268
注册 2006-12-26 17:18
19年会员
UID 74627
性别 男
状态 离线
del %~s0
菩提本无树,明镜亦非台,本来无一物,何处惹尘埃.
6 发表于 2007-02-17 21:11 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
19年会员
UID 79596
性别 男
来自 安徽
状态 离线
谢谢!!!

厉害呀!

set 取余和for 中%i是不是一个道理!

放入批处理中都要变成%%
???
7 发表于 2007-02-17 21:29 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
19年会员
UID 79596
性别 男
来自 安徽
状态 离线
再问一下:
@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 ]
8 发表于 2007-02-17 21:52 ·  中国 浙江 台州 温岭市 电信
高级用户
★★
DOS学徒
积分 526
发帖 252
注册 2007-02-12 05:35
19年会员
UID 79286
性别 男
状态 离线
ding
9 发表于 2007-02-18 07:24 ·  中国 北京 中国中信股份有限公司
荣誉版主
★★★
积分 2,013
发帖 718
注册 2006-02-18 07:07
20年会员
UID 50550
状态 离线
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语句中用!!来代替%%试试。
10 发表于 2007-02-18 09:27 ·  中国 安徽 马鞍山 电信
中级用户
★★
积分 493
发帖 228
注册 2007-02-16 00:38
19年会员
UID 79596
性别 男
来自 安徽
状态 离线

建议可以先用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 ]
论坛跳转: