Board logo

标题: 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 ]