![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-05 00:58 |
共 48,038 主题排行 / 350,123 发帖 / 今日 0 篇 / 48,251 会员排行 |
| DOS批处理 & 脚本技术(批处理室) » 如何在循环中使用Call命令? |
| 可打印版本 1,052 / 9 |
| 第1楼 wjj137404 | 发表于 2007-06-16 14:32 |
| 初级用户 发帖 10 积分 26 | |
|
如何在循环中使用Call命令? 在我作的批处理中需要判断多年的闰年和平年情况,一下是我的批处理程序:
@echo off set /a year_begin=1948 set /a year_end=2006 set /a loop=%year_begin%-1 setlocal EnableDelayedExpansion for /l %%i in (%year_begin%,1,%year_end%) do ( set /a loop+=1 set /a a=!loop! %% 4 set /a b=!loop! %% 100 set /a c=!loop! %% 400 set /a daynum=365 if "!a!"=="0" ( if not "!b!"=="0" set /a daynum=366 if "!c!"=="0" set /a daynum=366 ) else set /a daynum=365 echo !loop! !daynum! ) 以上是我作试验用的批处理,结果正确,可以运行,但是由于还要在for命令中嵌套很多其它的命令,所以我把判断闰年的部分写成调用的形势。我尝试的方案如下: ::@echo off set /a year_begin=1948 set /a year_end=2006 set /a loop=%year_begin%-1 set /a daynum=365 setlocal EnableDelayedExpansion for /l %%i in (%year_begin%,1,%year_end%) do ( set /a loop+=1 call :leap !loop! !daynum! echo !loop! !daynum! ) :leap ::判断润年和平年 echo %1 %2 @echo off set /a a=%1 %% 4 set /a b=%1 %% 100 set /a c=%1 %% 400 set /a %2=365 if "!a!"=="0" ( if not "!b!"=="0" set /a %2=366 if "!c!"=="0" set /a %2=366 ) else set /a %2=365 其中的daynum是我想得到的结果,但是运行的时候总是显示找不到操作数,请各位高人指点一二! |
|
| 第2楼 wudixin96 | 发表于 2007-06-16 15:49 |
| 银牌会员 发帖 931 积分 1,928 | |
|
不好意思。是偶错了。:-)
[ Last edited by wudixin96 on 2007-6-16 at 07:22 PM ] |
|
| 第3楼 wjj137404 | 发表于 2007-06-16 15:55 |
| 初级用户 发帖 10 积分 26 | |
|
我只是给%2赋值了,%1并没有赋值啊,不过我在分步测试的时候确实在set /a a=%1 %% 4时就有了问题,但是有其它的可以调用的方式么,请赐教!
|
|
| 第4楼 wjj137404 | 发表于 2007-06-16 16:26 |
| 初级用户 发帖 10 积分 26 | |
|
@echo off
set /a i = 19 set /a j = 12 call:fun i j answer echo %answer% goto :EOF :fun set /a answer = %1+%2 goto :EOF 这个例子是我从http://www.cn-dos.net/forum/viewthread.php?tid=21416&fpage=1&highlight=call摘抄的,试验也是通过的,感觉上思路上没有问题啊! |
|
| 第5楼 wudixin96 | 发表于 2007-06-16 19:54 |
| 银牌会员 发帖 931 积分 1,928 | |
|
其实写成这样,运行时容易理解点。
|
|
| 第6楼 wjj137404 | 发表于 2007-06-17 20:49 |
| 初级用户 发帖 10 积分 26 | |
|
谢谢指教,执行终于通过了!
|
|
| 第7楼 wjj137404 | 发表于 2007-06-17 20:58 |
| 初级用户 发帖 10 积分 26 | |
|
哦!还想再请教一下,为什么在我运行结束(运行结果正确)后总是显示3个连续的找不到操作数和两个命令语法不正确!百思不得其解。
|
|
| 第8楼 wudixin96 | 发表于 2007-06-18 08:51 |
| 银牌会员 发帖 931 积分 1,928 | |
|
偶这运行没问题的。
可以试着把@echo off注释掉,查看代码执行过程 |
|
| 第9楼 wjj137404 | 发表于 2007-06-18 10:24 |
| 初级用户 发帖 10 积分 26 | |
|
我去掉后发现在执行完最后一年(2006)的判断后,看起来DOS还是执行了一次leap部分,我用的操作系统是winXP
|
|
| 第10楼 wjj137404 | 发表于 2007-06-19 10:35 |
| 初级用户 发帖 10 积分 26 | |
|
找到原因了,忘了加goto :EOF,再次感谢!
|
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |