呵呵,youxi 兄,在下又要多言了。
代码测试出错,原因有两个。
一、在用set /a 的时候,好像变量名中不能含有“运算符”否则提示,运算符不存在
二、你在修改了代码后没有注意,call set ....这一句完全是错的。
三、还是那个老问题,就拿你这段代码来说,你的函数中分别用了y,m,d作为变量名,
但是如果我在代码的开头,已经给变量y,m赋了值的话,那么一但调用了你的函数,
我原来赋的值就 化为乌有 了。而别人要用你的“函数”是不可能先去研究你的代码的。
当然,用生僻的变量名,是一个办法,但始终有缺陷。
四、我的建议:
既然是“封装函数”就要做到“绝对”的不与代码发生冲突,
解决方法:在标签下,先开启“本地变量”到结束时再充分利用“变量延迟”的原理
在结束“本地变量”之前,给call的参数赋值。这样一来,你的标签下面就可以使用任意变量名了
而不用考虑与原来的代码冲突问题。
表达能力太差了,不知道,说明白没有。
测试代码如下,在使用call之前,已经设变量m等于aaaaaa,而在你的函数中也使用了m作为变量,
测试结果,m的值在你的“函数”中是月份,在回到call处后,仍是call之前的值 aaaaaa
::- @echo off
- set m=aaaaaa
- call :SplitDate Y
- echo %y%
- echo %m%
- pause
-
- :SplitDate OBJ Res
- setlocal
- for /f "delims=-/. tokens=1,2,3" %%i in ("%date:~0,-3%") do (
- set /a Y=%%i,M=100%%j%%100,D=100%%k%%100
- )
- endlocal&set "%~1=%y%-%m%-%d%"
- goto :eof
复制代码
[ 本帖最后由 随风 于 2007-11-16 05:14 编辑 ] |