中国DOS联盟论坛

中国DOS联盟

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

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

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » <<>>如何判断日期自动生成新批处理文件??
« [1] [2] »
作者:
标题: <<>>如何判断日期自动生成新批处理文件?? 上一主题 | 下一主题
影视狂奔
初级用户




积分 138
发帖 13
注册 2005-3-3
状态 离线
『楼 主』:  <<>>如何判断日期自动生成新批处理文件??

环境:win2000server的dos
计划任务:定一个计划任务,每天10点运行a.bat
a.bat的功能:判断日期(1,6,11,16,21,26,月未日)相等时生成另b.bat文件内容如下并自动执行b.bat:
======================================
atx.exe  200501to200502
atx.exe  200412to200501
atx.exe  200411to200412
ren  atx1.txt   0501to0502atx.txt
ren  atx2.txt   0412to0501atx.txt
ren  atx3.txt   0411to0412atx.txt
======================================
b.bat中的日期内容:为自动判断当前日期生成的,上面的规则是当前日期为2005年3月份,如当前是4月份即如下类推:
======================================
atx.exe  200502to200503
atx.exe  200501to200502
atx.exe  200412to200501
ren  atx1.txt   0502to0503atx.txt
ren  atx2.txt   0501to0502atx.txt
ren  atx3.txt   0412to0501atx.txt
======================================
求教:如何编写a.bat程序(不用第三方软件),谢谢指点!
[em06][em06][em06]

2005-3-5 00:00
查看资料  发送邮件  发短消息 网志  OICQ (4861681)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 2 楼』:  

意思还是不太看得明白



http://www.msfans.net/bbs/
2005-3-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
影视狂奔
初级用户




积分 138
发帖 13
注册 2005-3-3
状态 离线
『第 3 楼』:  

简单点:win2000server的dos编写一个a.bat批处理实现功能如下:
判断当前日期为(1,6,11,16,21,26,月未日)相等时生成另b.txt文件,
例:当前为3月1日时生成内容如下
atx.exe  200501to200502
ren  atx1.txt   0501to0502atx.txt
说明:自动判断当前日期生成的,生成上上月"200501",生成上月"200502"的文本嵌在该txt文件中。[em01][em01][em01]

2005-3-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (4861681)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 4 楼』:  

要是是纯粹只用批处理的话不用第三放工具很难,我目前还没想到方法.但是使用VBS就很容易完成



http://www.msfans.net/bbs/
2005-3-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 5 楼』:  

搞定:你把条件讲得详细点我把整个批处理全部给你for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do set a=%%c
for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do set b=%%b
for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do set c=%%a
for %%a in (01 02 03 04 05 06 07 08 09 10 11 12) do if %b%==%%a goto %%a:01
set /a d=%b%+11
set /a e=%b%+10
set /a n=%c%-1
set name=%n%%d%to%n%%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:02
set /a d=%b%+10
set /a e=%b%+9
set /a n=%c%-1
set name=%n%%d%to%n%%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:03
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:04
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:05
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:06
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:07
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:08
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:09
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:10
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:11
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:12
set /a d=%b%-2
set /a e=%b%-1
set name=%c%%d%to%c%%e%
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:end



http://www.msfans.net/bbs/
2005-3-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
影视狂奔
初级用户




积分 138
发帖 13
注册 2005-3-3
状态 离线
『第 6 楼』:  

不概高手,条件如下,我睇程序有好多共同点,能否简化?

条件:是遇日期为1,6,11,16,21,26,月未日  的时候才生成文件,其它日无须生成。另:echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat 这句的生成有异。。。
正确的应是:ren  atx.txt   0501to0502atx.txt    (是没有年份的20的)[em07][em07]

2005-3-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (4861681)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 7 楼』:  

不好意思楼主一下忘记判断时间了现在修正代码如下for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next1
goto end:next1



http://www.msfans.net/bbs/
2005-3-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 8 楼』:  

怎么搞得又出问题了怎么只出现那么点代码for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do set a=%%c
for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do set b=%%b
for /f "tokens=1,2,3 delims=- " %%a in ('date /t') do set c=%%a
for %%a in (01 02 03 04 05 06 07 08 09 10 11 12) do if %b%==%%a goto %%a:01
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next1
goto end:next1
set /a d=%b%+11
set /a e=%b%+10
set /a n=%c%-1
set name=%n%%d%to%n%%e%
if %c%==2005 set c=05
set /a n=%c%-1
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt 0%n%%d%to0%n%%e%atx.txt&gt;&gt;b.bat
goto end:02
for %%a in (01 06 11 16 21 26 28) do if %a%==%%a goto next2
goto end:next2
set /a d=%b%+10
set /a e=%b%+9
set /a n=%c%-1
set name=%n%%d%to%n%%e%
if %c%==2005 set c=05
set /a n=%c%-1
echo atx.exe %name%&gt;b.bat
echo ren atx1.txt 0%n%%d%to0%n%%e%atx.txt&gt;&gt;b.bat&gt;&gt;b.bat
goto end:03
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next3
goto end:next3
set /a d=%b%-2
set /a e=%b%-1
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:04
for %%a in (01 06 11 16 21 26 30) do if %a%==%%a goto next4
goto end:next4
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:05
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next5
goto end:next5
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:06
for %%a in (01 06 11 16 21 26 30) do if %a%==%%a goto next6
goto end:next6
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:07
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next7
goto end:next7
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:08
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next8
goto end:next8
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:09
for %%a in (01 06 11 16 21 26 30) do if %a%==%%a goto next9
goto end:next9
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:10
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next10
goto end:next10
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%0%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:11
for %%a in (01 06 11 16 21 26 30) do if %a%==%%a goto next11
goto end:next11
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%0%d%to%c%%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:12
for %%a in (01 06 11 16 21 26 31) do if %a%==%%a goto next12
goto end:next12
set /a d=%b%-2
set /a e=%b%-1
if %c%==2005 set c=05
set name=%c%%d%to%c%%e%
echo atx.exe %name%&gt;b.bat
set name=%c%0%d%to%c%0%e%
echo ren atx1.txt %name%atx.txt&gt;&gt;b.bat
goto end:end



http://www.msfans.net/bbs/
2005-3-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
影视狂奔
初级用户




积分 138
发帖 13
注册 2005-3-3
状态 离线
『第 9 楼』:  

你好牛啊,真佩服。。

我有个想法,能否将“月未日”的算法改为:以当月的1日减1得到上月的月未日期呢?
如:当前为2005-03-06,取2005-03-01减1得出2005-02-28,这样获到28的日期。另:if %c%==2005 set c=05  这句仅适用于2005年,对于2006年就无效了。[em07][em07]

2005-3-6 00:00
查看资料  发送邮件  发短消息 网志  OICQ (4861681)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 10 楼』:  

你可以自己添加吗if %c%==2006 set c=06不就行了
楼主你最好把你的详细想法写上我好写出代码来不然等我写出代码来你又改变想法



http://www.msfans.net/bbs/
2005-3-7 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
影视狂奔
初级用户




积分 138
发帖 13
注册 2005-3-3
状态 离线
『第 11 楼』:  

你的程序已非常好了,

只是写求月未日的方法每月判断有点局限,每年都要改12个月的月未日,可否简捷点?我仅有想法,无法编写程序,所以只能提供该想法如下:

“月未日”的算法改为:以当月的1日减1得到上月的月未日期呢?如:当前为2005-03-06,取2005-03-01减1得出2005-02-28,这样获到28的日期。[em07][em07]

2005-3-7 00:00
查看资料  发送邮件  发短消息 网志  OICQ (4861681)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 12 楼』:  

老大这是批处理不是其他语言再说要改也只是改2月就行了其他不需要改啊?



http://www.msfans.net/bbs/
2005-3-7 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
影视狂奔
初级用户




积分 138
发帖 13
注册 2005-3-3
状态 离线
『第 13 楼』:  

哈哈,也是,也是,忘记了每年的月未日规律添....谢谢指点,非常感激....[em06][em06][em06]

2005-3-7 00:00
查看资料  发送邮件  发短消息 网志  OICQ (4861681)  编辑帖子  回复  引用回复
chenhui530
高级用户





积分 772
发帖 273
注册 2004-10-23
状态 离线
『第 14 楼』:  

没事!还有什么问题就一起提出来吧



http://www.msfans.net/bbs/
2005-3-7 00:00
查看资料  发送邮件  发短消息 网志  OICQ (77740821)  编辑帖子  回复  引用回复
影视狂奔
初级用户




积分 138
发帖 13
注册 2005-3-3
状态 离线
『第 15 楼』:  

有问题???下列实际执行时提示出错!!!!
set /a d=08-1
set /a d=09-1
无效数字。数学常数只能是十进制(17),十六位进制(0X11)或八进制(021)
另:批处理的变量会不会影响到其它程序???是该批处理的局部变量还是WIN全局变量???该批处理完毕退出后,这些变量还存在吗?

[此贴子已经被作者于2005-3-7 17:08:15编辑过]




2005-3-7 00:00
查看资料  发送邮件  发短消息 网志  OICQ (4861681)  编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


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



论坛跳转: