中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » 批处理运行时出现无效数字,怎么解决
作者:
标题: 批处理运行时出现无效数字,怎么解决 上一主题 | 下一主题
linjuming
初级用户





积分 30
发帖 30
注册 2008-9-19
状态 离线
『楼 主』:  批处理运行时出现无效数字,怎么解决

批处理运行时出现无效数字,怎么解决

下面的代码是将日期减少两年,然后运行一个软件,再把时间改回现在。因为这个软件已经过期,所以要用这种方法来启动软件。
之前都一直运行都好好的,就今天开始出现了这种问题,请问为什么,高手帮忙修正一下。
运行时出现




@echo off&setlocal ENABLEDELAYEDEXPANSION
set str=%date%
for /f "tokens=1 delims= " %%a in ("%date%") do set w=%%a
for /f "tokens=1,2* delims=-" %%a in ("%w%") do (set/a e=%%a-2
date !e!-%%b-%%c
start "" "d:\Progra~1\PhraseExpress\phraseexpress.exe"
call :ProcDelay 1000
date !str!
)
exit

:ProcDelay delayMSec_
   setlocal enableextensions
   for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set start_=%%h%%i%%j%%k
:_procwaitloop
for /f "tokens=1-4 delims=:. " %%h in ("%time%") do set now_=%%h%%i%%j%%k
set /a diff_=%now_%-%start_%
   if %diff_% LSS %1 goto _procwaitloop
   endlocal & goto :EOF

2010-4-9 01:01
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Hanyeguxing
银牌会员

正在学习中的菜鸟...


积分 1039
发帖 897
注册 2009-3-1
来自 在地狱中仰望天堂
状态 离线
『第 2 楼』:  

问题出在时间延迟部分: set start_=%%h%%i%%j%%k 和 set now_=%%h%%i%%j%%k,当时间为凌晨0点到凌晨1点时,变量start_和now_就会成为0开头的数字。在set /a diff_=%now_%-%start_%时,set/a是根据运算的数字首为是否是0来判断进制的,0开头就不是10进制,而是8进制(因为0后不可能有x,所以不可能是16进制的),所以整个数字串中如果含有超过7的数字就出错了。
这个问题是批处理在设计时的缺陷造成的。同时,这个延迟部分还没有考虑跨0点的问题,虽然这个发生的几率很低,也就是当批处理是在23点59分50多秒开始运行后,延迟时间将产生重大误差。

考虑到实际使用中,你的延迟要求并不高,所以把call :ProcDelay 1000改成ping /n 10 127.1>nul。exit下面的全去掉。

[ Last edited by Hanyeguxing on 2010-4-9 at 02:20 ]



批处理之家 http://bbs.bathome.net/forum-5-1.html
2010-4-9 02:09
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
linjuming
初级用户





积分 30
发帖 30
注册 2008-9-19
状态 离线
『第 3 楼』:  

谢谢,两边论坛都回复了,寒夜哥果然热心

2010-4-9 10:11
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: