中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-03 10:55
48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行
DOS批处理 & 脚本技术(批处理室) » set /a 取余(%)???
可打印版本  990 / 9
第1楼 xycoordinate 发表于 2007-02-17 03:49
中级用户 发帖 228 积分 493 来自 安徽
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 ]
第2楼 qjbm 发表于 2007-02-17 11:01
初级用户 发帖 44 积分 125
@echo off
set syear=2008
set /a yyyy=syear%%4
第3楼 6622186 发表于 2007-02-17 12:59
高级用户 发帖 411 积分 894
关于删除自身
删除.bat 文件自身可以用 del %0 , 在命令行下运行可以, 但是双击该文件无效, 只能用 del filename.bat 才可以, 请问这是为什么?
第4楼 spiegboy 发表于 2007-02-17 14:26
初级用户 发帖 9 积分 24
不是把,我试验过的,在批文件中写入del %0 就可以删除文件本身,你再试试吧
第5楼 PPdos 发表于 2007-02-17 17:34
高级用户 发帖 268 积分 783
del %~s0
第6楼 xycoordinate 发表于 2007-02-17 21:11
中级用户 发帖 228 积分 493 来自 安徽
谢谢!!!

厉害呀!

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

放入批处理中都要变成%%
???
第7楼 xycoordinate 发表于 2007-02-17 21:29
中级用户 发帖 228 积分 493 来自 安徽
再问一下:
@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楼 gne3 发表于 2007-02-17 21:52
高级用户 发帖 252 积分 526
ding
第9楼 3742668 发表于 2007-02-18 07:24
荣誉版主 发帖 718 积分 2,013
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楼 xycoordinate 发表于 2007-02-18 09:27
中级用户 发帖 228 积分 493 来自 安徽

建议可以先用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 ]
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023