写一个bat文件,传两个参数,在两个参数之间循环。参数是日期形式的字符串。下面是代码。

@echooffset/abegin=20121231set/aend=20130102echo循环开始for/l%%nin(%begin%,1,%end%)do(set... @echo offset /a begin=20121231
set /a end=20130102
echo 循环开始
for /l %%n in (%begin%,1,%end%) do (
set /a begin_d=%begin:~6,2%
call :xxx
echo 今天是第%%n天
)
echo 循环结束

:xxxecho 执行到call里了
if %begin_d% leq 31 (
echo -------
set /a begin_d=%begin:~6,2%
set /a begin_m=%begin:~4,2%) else (
echo +++++++++
set /a begin_d=01
set /a begin_m=%begin:~4,2%+1)
if %begin_m% leq 12 (
echo --------++++++++++++-----------
set /a begin_m=%begin_m%
set /a begin_y=%begin:~0,4%) else (
echo +++++++++++-----------++++++++++
set /a begin_m=01
set /a begin_y=%begin:~0,4%+1)
在XXX中,为什么判断进入不到else中呢?
麻烦过路的大侠给看看呐
展开
 我来答
Devi0s
2020-05-28
知道答主
回答量:42
采纳率:100%
帮助的人:1.7万
展开全部

首先说一下问题,

因为在批处理开始执行的时候,每一个引用的变量都会被扩充。

因此重新变量赋值改变后,使用%变量%来引用变量值的话,

得到的会是原来的变量值,启用延迟变量扩充可以解决。

看一个例子:


set var=value

if "%var%"=="value" (

    set var=new_value

    if "%var%"=="new_value" @echo 看见这个说明新的变量值引用成功。


结果是不会看见消息的。

正确做法是


SetLocal EnableDelayedExpansion

set var=value

if "%var%"=="value" (

    set var=new_value

    if "!var!"=="new_value" @echo 看见这个说明新的变量值引用成功, var:!var!

)


然后是for变量的理解,你对for变量理解有误。在你给出这段代码中,

for变量%%n 是按照循环体(20121231,1,20130102)中设好的范围,

被依次赋值为数字 20121231 到 20130102,

虽然你在do ( ... ) 这部分,通过call调用执行了另一段代码,

但你调用的这部分代码,其实际效果也只是满足IF的条件判断,来新增并赋值了begain_d,begain_m,begain_y 这几个变量而已,没有影响到%%n的值。

所以你在你for语句执行到最后一条命令 echo 今天是第%%n天时,返回给你的只会是

今天是第 20121231 天

今天是第 20121232 天

今天是第 20121233 天

... ...

今天是第 20130102 天

这样的结果。


所以从你的批处理代码中确实没法搞明白你想做什么。

如果是想实现表示日期的数字每日递增,你的FOR循环就已经实现了。

如果是想计算日期差,并不需要用循环来将全部日期都列出一遍。

你可以直接描述一下你具体想通过批处理实现怎样的效果。

以便根据你的描述,重新给出对应的脚本代码

nameyu8023
2013-02-28 · TA获得超过528个赞
知道小有建树答主
回答量:640
采纳率:68%
帮助的人:407万
展开全部
自己写的?好乱。不知道你想干嘛。别的先不说,就FOR /L这个 不管你CALL后的变量值是多少,它都会循环结束的,也就是从 20121231--到--20130102才会结束的。显示的也只是 20121231--到--20130102
应为早在FOR开始的时候变量就已经固定了。在FOR /L环境不管你变量如何变化对FOR本身毫无影响。
就如你建立文件夹里的子文件夹,不管你如何操作子文件,文件夹的名字都不会改变。。。

要不你直接说你想干嘛吧。我给你写。
更多追问追答
追问
我也是刚学这个,菜鸟!
要实现的功能是从数据库中读取两个日期,然后写个for循环,从较小的日期开始,到较大的日期结束,每次加一天。这个是我自己写的,call调用的XXX的功能是让日期能够按照日期的规则加。它现在的变化是:比如20121231,再加一天,变成20121232了。
追答
还是不太懂,
你循环到结束有什么意义?1W多次?
echo 今天是第%%n天。这个是 从开始的时间到结束的时间的第几天。

还是本月的第几天?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式