标题: set /a 取余(%)???
[打印本页]
作者: xycoordinate
时间: 2007-2-17 03:49
标题: 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 ]
作者: qjbm
时间: 2007-2-17 11:01
@echo off
set syear=2008
set /a yyyy=syear%%4
作者: 6622186
时间: 2007-2-17 12:59
标题: 关于删除自身
删除.bat 文件自身可以用 del %0 , 在命令行下运行可以, 但是双击该文件无效, 只能用 del filename.bat 才可以, 请问这是为什么?
作者: spiegboy
时间: 2007-2-17 14:26
不是把,我试验过的,在批文件中写入del %0 就可以删除文件本身,你再试试吧
作者: PPdos
时间: 2007-2-17 17:34
del %~s0
作者: xycoordinate
时间: 2007-2-17 21:11
谢谢!!!
厉害呀!
set 取余和for 中%i是不是一个道理!
放入批处理中都要变成%%
???
作者: xycoordinate
时间: 2007-2-17 21:29
再问一下:
@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 ]
作者: gne3
时间: 2007-2-17 21:52
ding
作者: 3742668
时间: 2007-2-18 07:24
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语句中用!!来代替%%试试。
作者: xycoordinate
时间: 2007-2-18 09:27
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 ]